P14953 乒乓博弈 个人题解
题目大意
现在有三个人 \(a,b,s\) 在玩一个游戏,每局游戏三个人分别为获胜者、失败者和旁观者,每次游戏由上一句游戏获胜者与旁观者进行,特别的第一句游戏由 \(a,b\) 进行,\(s\) 旁观。问在 \(n\) 轮之后 \(s\) 最多和最少进行多少次游戏。
Solution
首先问题实际上要求 \(s\) 进行游戏的次数,而能进行一场游戏的要么是上一局的获胜者,要么是上一局的旁观者。很明显,这两种可能就是问题的两个答案,当 \(s\) 从第二局开始一直连胜(因为第一局一定参与不了),那么他能进行的游戏次数最多;当 \(s\) 从第二局开始只要轮到他就输,相当于每次都是以上一局旁观者的身份参加比赛,那么他能进行的游戏次数最少。
由上面我们可以得到,最多的时候能进行的次数为 \(n-1\)(因为第一局参加不了),最少的时候能进行的次数为 \(\frac{n}{2}\)(因为隔一局就要以旁观者的身份参加游戏),注意数据范围会爆 int。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0' || c>'9'){
if(c=='-')
f=-1;
c=getchar();
}
while(c>='0' && c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
int T=read();
signed main(){
while(T--){
int n=read();
printf("%lld %lld\n",n-1,n/2);
}
return 0;
}

浙公网安备 33010602011771号