巨水水水水的一道題,居然沒做起,30分騙分完全在諷刺當時的自己好嗎qwq...
給你乙個長度為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。
input
第一行:t,表示資料組數
對於每組資料:
第一行:2個數,k,n
第二行:n個數,表示這個序列
output
共t行,每行乙個數表示答案
sample input100%資料滿足sample output2
7 3
1 2 3
4 8
2 1 2 1 1 2 1 2
0
6
1<=t<=20
1<=n<=50000
1<=k<=1000000
序列的每個數<=1000000000
30%資料滿足
1<=t<=10
1<=n,k<=1000
字首和+「餘數」思想+排列組合
1)預處理字首和and各字首和mod k 的個數
2)餘數相同的字首和數列相減得出——餘數為0的子串行
3)排列組合一下:餘數為 i 的字首和數列個數設為cnt[ i ],它們兩兩組合可以有cnt[ i ]*( cnt[ i ]-1 )種情況,答案cnt[ 0 ]~cnt[ k-1 ]累加即可
有乙個細節是cnt[ 0 ] (mod k 餘數為0的字首和數列個數)最後要單獨加一次,或者其初值附為1,因為它自己就可以整除,不需要和別的字首和數列相減
//已確認會超時orz...
#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int maxn=50000;
ll a[maxn+5],pre[maxn+5];
int k,n;
int main()
for(int i=1;i<=n;i++)
for(int j=1;j<=n-i+1;j++)//子串行開頭位置
printf("%d\n",ans);
} return 0;
}
#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int maxn=5e4,maxk=1e6;
ll a[maxn+5],pre[maxn+5],cnt[maxk+5];
int k,n,ans;
void init()
int main()
for(int i=0;i<=k-1;i++)
if(cnt[i]>=1)
ans+=cnt[i]*(cnt[i]-1);
printf("%d\n",ans/2);
} return 0;
}
2019 遊記 中山紀念中學暑期遊Day3
今天沒有考試,專門講課,聽不懂的同學還可以回機房瞎搞 感覺安排的還可以,至少時間還是挺充裕的,只是講解的內容太多了,消化不完qaq.早上依舊沒有早起.三天過去了,我連有沒有鈴聲都不知道 去食堂吃了乙個椰蓉麵包 學校居然取名 奶皇麵包 是的,我字沒有打錯,看起來就是這樣高大上,然鵝吃起來像批發的 乙個...
2019 遊記 中山紀念中學暑期遊Day6
今天的安排是 聽課!資料結構 專題,花了一早上和一下午,晚上在搞乙個兄弟自己出的題目 賊坑 於是時間又沒了qaq.真心覺得時間怎麼都不夠用啊咧.早上還是沒有早起成功,於是匆匆趕往食堂,居然有公尺漢堡 公尺飯夾雞肉 吃得還算滿意qwq 來到報告廳,座位不出所料的被佔滿了,可是還是get到乙個c位 人品...
2019 遊記 中山紀念中學暑期遊Day9
昨天去珠海玩了下,感覺還不錯誒,就是好熱好曬.很想細寫但是沒時間,故事大多都在 上了 其實現在正在打字的我是10號的我.來填坑了23333.詳情記不到了,直接說考試 這次考試真的考得好炸,都是難以暴力應付的題qwq.第一題 自己想到了是dp,而且和正解的狀態定義都一樣!但是不會打,這就很現實了.暴力...