[JZOJ 5697] 农场
Posted akoasm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JZOJ 5697] 农场相关的知识,希望对你有一定的参考价值。
题目大意:将 n 个数 ai分成若干连续的段,使得每段的和都相等,求最多可以分成多少段。
思路:
考虑ai的和为sum,那么每一段的和就是约数。
对于每一个d,考虑其是否合法。
1e6之内用桶统计不会超时。
#include <bits/stdc++.h>
using namespace std;
int n;
int ans;
int sum;
int tong[1000010];
inline bool ok(int mid) {
for(int i = 1;i <= sum / mid; ++i) {
if(!tong[mid * i]) {
return false;
}
}
return true;
}
int main () {
#ifdef ONLINE_JUDGE
freopen("farm.in","r",stdin);
freopen("farm.out","w",stdout);
#endif
scanf("%d",&n);
for(int i = 1;i <= n; ++i) {
int x;
scanf("%d",&x);
sum += x;
tong[sum] = 1;
}
for(int i = 1;i <= sum; ++i) {
if(sum % i == 0) {
if(ok(i)) {
ans = i;
break;
}
}
}
printf("%d
",sum / ans);
return 0;
}
以上是关于[JZOJ 5697] 农场的主要内容,如果未能解决你的问题,请参考以下文章