牛客OI赛制测试赛-序列-模拟
哇这道题好坑啊,可能是我太菜了
题意就是叫把一个连续序列分成K组,使得每个组的和都相等
我最开始的想法是由于要分成K组,那我们知道,每组一定有sum(a[i])/k这样我们只需要每次当num==sum/k时,把num变成0
这样我们看最后是不是0,即可判断是否可以分组,但是最后要考虑到末尾为0的情况,你比如,序列是9 -1 8 0,你分2组,那
么我们知道,在8的时候我们就把num清空了,这样flag遇到0就变变成负数,就判断错了,我们其实可以这样,在最后再次判断num==0如果还等于0,那么就令flag为1,否则为-1
感谢给我讲题的大佬
#include<iostream> #include<string.h> #include<stdio.h> #include<algorithm> using namespace std; int main() { int n,q; long long a[100005]; while(~scanf("%d%d",&n,&q)) { long long sum=0; for (int i=1; i<=n; i++) { scanf("%lld",&a[i]); sum+=a[i]; } int k=0; int cnt=0; long long num=0; for (int i=1;i<=q;i++) { scanf("%d",&k); int flag=0; if (sum%k) { flag=0; } else { num=0; cnt=0; for (int i=1; i<=n; i++) { num+=a[i]; if (num==sum/k) { flag=1; num=0; }else { flag=0; } } if (num==0){ flag=1; } } if (flag)printf("Yes\n"); else printf("No\n"); } } return 0; }