题目链接

https://codeforces.com/contest/1159/problem/B

题意

给定 $n$ 个非负整数 $a_1,a_2,…,a_n$,求 $\frac{\min(a_i, a_j)}{|i-j|}$ ?其中 $i, j \in [1,n], i \neq j$

题解

对于这类的枚举问题,一般套路都是 “固定一个数”,这里很明显是固定一下 $\min(a_i, a_j)$。

所以只要从 $a_1$ 遍历到 $a_n$,把当前遍历到的值作为最小值,然后不管最左侧或者最右侧元素是否小于它,直接最大化分母就可以了。

为什么不会漏解?因为 每一个 $a_i$ 都当了一次分子

代码
const int maxn = 3e5+5;

int n, arr[maxn];
int ans = 1e9;

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> arr[i];
    for (int i = 1; i <= n; i++) {
        int d = max(i-1, n-i);
        ans = min(ans, arr[i] / d);
    }
    cout << ans << endl;
}