數列(NOIP17提高模擬訓練11)
阿新 • • 發佈:2017-06-03
輸出格式 with set while 一行 cnblogs cpp tdi nbsp
給你一個長度為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。
輸入格式:
第一行:T,表示數據組數
對於每組數據:
第一行:2個數,K,N
第二行:N個數,表示這個序列
輸出格式:
共T行,每行一個數表示答案
樣例輸入:
2 7 3 1 2 3 4 8 2 1 2 1 1 2 1 2
樣例輸出:
0 6
數據範圍:
100%數據滿足
1<=T<=20
1<=N<=50000
1<=K<=1000000
序列的每個數<=1000000000
30%數據滿足
1<=T<=10
1<=N,K<=1000
和上次寫的思路是一樣的,這裏不多闡述~
include<bits/stdc++.h> using namespace std; int book[2301000]; int main() { int t; ios::sync_with_stdio(false); cin>>t; while(t--) { long long k,n; memset(book,0,sizeof(book)); cin>>k>>n; long long sum=0; long long x; long long ans=0; for(int i=1;i<=n;i++) { cin>>x; sum=(sum+x)%k; book[sum%k]++; } for(int i=0;i<=k-1;i++) ans+=book[i]*(book[i]-1)/2; cout<<ans+book[0]<<endl; } return 0; }
數列(NOIP17提高模擬訓練11)