题目大意:将 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_JUDGEfreopen("farm.in","r",stdin);freopen("farm.out","w",stdout);#endifscanf("%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("%dn",sum / ans);return 0;
}
转载于:.html
本文发布于:2024-01-28 22:37:47,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170645267210791.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |