jzoj 2644. 数列
给你一个长度为N的正整数序列,如果一个连续的子序列,子序列的和能够被K整
除,那么就视此子序列合法,求原序列包括多少个合法的连续子序列?
对于一个长度为8的序列,K=4的情况:2, 1, 2, 1, 1, 2, 1, 2 。它的答案为6,子序列
是位置1->位置8,2->4,2->7,3->5,4->6,5->7。
#includeusing namespace std; int sum[50500],k,t,n; int main(){ scanf("%d",&t); for(int o=1;o<=t;o++){ scanf("%d%d",&k,&n); sum[0]=0; for(int i=1;i<=n;i++){ scanf("%d",&sum[i]); sum[i]=(sum[i]+sum[i-1])%k; } sort(sum+1,sum+1+n); int tt=0; sum[0]=-10086; int ans=0; for(int i=1;i<=n;i++){ if(sum[i]==0)ans++; if(sum[i]==sum[i-1]){ tt++; ans+=tt; } else tt=0; } printf("%d\n",ans); } return 0; }