JZOJ 禮物 數論

2021-09-25 05:39:08 字數 1336 閱讀 4332

聖誕節這天,某商店準備了n個禮品盒,分別用整數1-n進行編號。其中,編號為1的盒子中有乙個糖果,編號為2的盒子中有2個糖果,。。。編號為n的盒子中有n個糖果。這天一早,中山幼兒園的k個小朋友一起來到這間商店。作為當天的第一批顧客,這些小朋友可以從這n個禮品盒中選出兩個拿走。小朋友們商量了一會兒後決定,他們拿走的糖果並不一定要多,但是一定要能夠剛好平分給每個人。即拿走的兩個盒子中的糖果總數一定要使k的倍數。現在他們想知道一共有多少種方案可供選擇。

每行兩個正整數n和k,其中1<=n<=109,1<=k<=109。一行n=k=0

表示輸入結束,這一行不用處理。

對輸入中除了n=k=0外的每一行,輸出一行,這一行只有乙個數,即其相對應的輸入所得到的方案數。

1 13 2

5 250 50

0 0014

2420%的資料n<=100;

80%的資料k<=1000;

每個輸入檔案最多有200行輸入資料。

100%: (zlt)

如果有x,y,a,b,x%k == a,y%k == b,a+b == k,則(x+y)%k==0。根據這個特性,我們可以列張表,然後利用乘法原理,一一配對。然而,可以直接被k整除的,要特殊判斷;k為偶數時也要特判斷。

再分情況討論:

1、k為奇數且n%k沒過k一半時

2、k為奇數且n%k過k一半時

3、k為偶數且n%k沒過k一半時

4、k為偶數且n%k過k一半時

;//「+(l+1)*l/2」是因為中間有數,所以把「l*(l-1)/2」做些改動;而「-l*(l-1)/2」是因為實際上這一段是莫得匹配滴;(當然也可以x+=l)

if(t>

0) x+

=(l+1)

*t;//

printf

("%lld\n"

,x);

scanf

("%lld%lld"

,&n,

&k);

}return0;

}不懂的可以去看lyf大佬

jzoj禮物 數論

description n個禮品盒分別用整數1 n進行編號。其中,編號為1的盒子中有乙個糖果,編號為2的盒子中有2個糖果,編號為n的盒子中有n個糖果。問有多少種方案使兩個盒子中的糖果加起來為k的倍數。input 每行兩個正整數n和k,其中1 n 109,1 k 109。一行0 0表示輸入結束,這一行...

jzoj遊戲 規律 數論

description king 很喜歡賭博,這次 king邀請貓老大來玩乙個遊戲。king 拿出了 n 塊 0 input 三行每行乙個數 n 0 output 對於每局,如果 king 必勝則輸出一行 king will win.否則第一行輸出 maolaoda willwin.第二行輸出他第一...

數論 JZOJ 5389 解夢

傳送門 這道題的分析本身不難,但這道題告訴了我們 使用同余時一定要記著分析一番。不難發現,題目中要求的東西實質上就是aa b 1 習慣了直接求模的我直接用了power a,power a,b 1 mod mod,很遺憾,這是錯的。在第一層的指數部分 ab 1 要想化為等價的式子,必須用到一些數論的知...