标签:
5.16
...
5.17
cf353 c C - Money Transfers
只想到如果一个区间长度为 x 的话,需要 x-1次操作
然后一直想环形转成线形要怎么做...
看题解.
可以考虑成 k 个区间 每个区间的和都为 0 那么 需要 n-k次
只要 k 最大
暴力算前缀和,如果碰到一次前缀和相等的,就说明中间那一段为 0 了
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<map> 6 using namespace std; 7 8 typedef long long LL; 9 int n; 10 const int maxn = 1e6+5; 11 map<long long,int> h; 12 int a[maxn]; 13 14 int main(){ 15 while(scanf("%d",&n) != EOF){ 16 int x; 17 h.clear(); 18 LL pre = 0LL; 19 int ans = 0; 20 for(int i = 1;i <= n;i++){ 21 scanf("%d",&a[i]); 22 pre += 1LL*a[i]; 23 h[pre]++; 24 ans = max(ans,h[pre]); 25 } 26 printf("%d\n",n-ans); 27 } 28 return 0; 29 }
标签:
原文地址:http://www.cnblogs.com/wuyuewoniu/p/5503615.html