队内赛T2 看错题的产物改编而来的产物
题目
原题是这样的:
输入输出样例
输入 #1
6
1 2 3 4 5 6
输出 #1
6
解题思路
“KJ,你说有没有一种可能,我输出最大值能拿多少分”
事实证明,能拿100,😅😅然而我没打 🐮🐴🖐🏻
设一共有 n 个数,n 个数中最大值为 maxn, 而答案中的最大公约数为 x
如果只选一个maxn,那么答案为maxn,而序列个数为maxn / x
可以发现,即使 x 是 n 个数的最大公约数(也就是序列长度为 n ),n 也一定小于 maxn / x
因为所有数都是不同的,所以。。。我也不是很会证。。。😅😅🖐🏻
在顺序序列中(以x = 2举例),2的倍数2,4,6,8,10…(顺序会使n最大)
而分解出来,2 * 1,2 * 2,2 * 3,2 * 4,2 * 5,n = 当前数 / x,进一步的,n ≤ maxn / x
那么maxn就是最优解 =》答案就是最大数
我证了个💩 😅😅
Code
#include <bits/stdc++.h>
#define P 8681123
#define ll long long
using namespace std;
ll n, maxn, x;
int main() {
scanf("%lld", &n);
for(int i = 1; i <= n; i ++) {
scanf("%lld", &x);
maxn = max(maxn, x);
}
printf("%lld", maxn % P); //最后再%,求max的时候%会有问题(比如8681124 和 8681122)
}