- BC20270003's blog
题解:C48. 【例10.2】分钱游戏
- 2024-10-31 16:43:18 @
思路:
首先,我们知道了他们分钱的操作,并且由于最后他们的钱数相同,所以我们可以用以下代码得知他们最后的钱数:
long long k;//总钱数
long long a,b,c;//a是甲的,b是乙的,c是丙的
cin>>k;//输入总钱数
a=b=c=k/3;//最后大家都一样,所以直接平分
然后由于操作相当于让其中两个数翻倍且让一个数狠狠的减小,所以我们可以用以下代码回溯一次操作:
c=c+a/2+b/2;//把钱换回来!
a/=2,b/=2;//已经还了钱,所以减少钱数
最后,我们就可以快乐的AC这道题啦ψ(`∇´)ψ
AC code:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long k;
long long a,b,c;
cin>>k;
a=b=c=k/3;
c=c+a/2+b/2;
a/=2,b/=2;
b=b+a/2+c/2;
a/=2,c/=2;
a=a+b/2+c/2;
b/=2,c/=2;
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}