切圈圈 牛客小白月赛

原题链接

考察:思维,前缀和

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 }

 

posted @ 2021-04-21 21:17  acmloser  阅读(56)  评论(0编辑  收藏  举报