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;
}
posted @ 2026-01-03 17:41  See_you_soon  阅读(4)  评论(0)    收藏  举报