1. 程式人生 > >AtCoder Regular Contest 102

AtCoder Regular Contest 102

contest HERE src tco http 技術分享 spa std The

作為一個大蒟蒻,我就只有時間寫c了QAQ

題目鏈接

題意:

給n,k,求有多少個3元組(a,b,c),滿足a+b,b+c,c+a都是k的倍數(n,k<=2e5,1<=a,b,c<=n)

根據題意可以推導:

∵(a+b)%k=0

 (b+c)%k=0

 (c+a)%k=0

∴[a+b-(b+c)]%k=0

∴(a-c)%k=0

∴(a+c+a-c)%k=0

∴2a%k=0

同理:2b%k=0,2c%k=0

分類討論:

當k為奇數時,顯然a,b,c都是k的倍數,答案就是pow(int(n/k),3)

當k為偶數時,a,b,c都是k/2的倍數,但a+b的和不為偶數時,就不符合要求了。

所以a,b,c要麽全是奇數,要麽全是偶數。

答案就是pow(int(n/(k/2),3)+pow(int((n+k/2)/k,3).

技術分享圖片
 1 #include<bits/stdc++.h>
 2 ll n,k,p,ans;
 3 int main(){
 4     cin>>n>>k;
 5     p=n/k;
 6     ans=p*p*p;
 7     if(k%2==0){
 8         p=(n+(k/2))/k;
 9         ans+=p*p*p;
10 } 11 cout<<ans<<\n; 12 }
代碼

AtCoder Regular Contest 102