AtCoder Regular Contest 102

作为一个大蒟蒻,我就只有时间写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 }
代码

 

转载于:https://www.cnblogs.com/mimiorz/p/9571862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值