Educational Codeforces Round 136 (Rated for Div. 2)-C

传送门
思路还是不够清晰,搞了半天没搞出来。要多练练这种题呀!
给牌做个标记,max=1,max-1=2,max-2=3,max-3=4;
分三种情况:

  1. 如果先手拿到1,那无论如何先手都会赢,先手只要第一次就出1这张牌就好了
  2. 如果先手拿到2,3,4,这三张牌的话,无论先手先出2或者3或者4,后手都只能拿1来抵挡,先手接着出余下两张牌中的任意一张,后手都没有牌可以出了,先手获胜
  3. 先手拿到2,3,这两张牌,先手先出2,后手出1,此轮结束,后手出4,先手出3,此轮结束,这种状态就转化为一共有n-4张牌的状态

综上所述, c n − 1 n / 2 − 1 c_{n-1}^{n/2-1} cn1n/21+ c n − 4 n / 2 − 3 c_{n-4}^{n/2-3} cn4n/23+f[n-4]

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll c[70][70],f[1000];
int main()
{
	int t,n;
	cin>>t;
	for(int i=0; i<=60; i++)
		for(int j=0; j<=60; j++)
			if(!j)c[i][j]=1;
			else if(i>0&&j>0)c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
	f[2]=1;
	f[4]=3;
	for(int i=6; i<=60; i++)
		f[i]=((c[i-1][i/2-1]+c[i-4][i/2-3])+f[i-4])%mod;
	while(t--)
	{
		cin>>n;
		cout<<f[n]<<" "<<(c[n][n/2]-1-f[n]+mod)%mod<<" "<<"1"<<endl;

	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值