切圈圈 牛客小白月赛
考察:思维,前缀和
md 我是sb5555想了半天同余
思路:
当[l,r]区间和为0,说明sum[r]-sum[l-1]==0,也就是sum[r] == sum[l-1].对每个位置求前缀和.找出现次数最多的前缀和.
1 #include <iostream> 2 #include <cstring> 3 #include <unordered_map> 4 using namespace std; 5 const int N = 10010; 6 int n,sum[N]; 7 unordered_map<int,int> um; 8 int main() 9 { 10 int T; 11 scanf("%d",&T); 12 while(T--) 13 { 14 int cnt = 0; um.clear(); 15 scanf("%d",&n); 16 for(int i=1;i<=n;i++) scanf("%d",&sum[i]),sum[i]+=sum[i-1]; 17 for(int i=1;i<=n;i++) um[sum[i]]++; 18 for(auto it:um) cnt = max(cnt,it.second); 19 printf("%d\n",cnt); 20 } 21 return 0; 22 }