带证明的题解
2025-10-23 23:25:08
发布于:山东
4阅读
0回复
0点赞
结论:当 是奇数的时候 dd 必胜,反之 bb 必胜。下面我们来准备证明一下,但我们的证明围绕了一个好东西:
如果一种游戏的最终局面(某一方输)满足某一性质,并且游戏中所有满足该性质的局面所能创造出的新局面都不满足该性质,同时所有不满足该性质的局面一定可以产生出至少一个满足该性质的局面,那么我们就可以根据最初局面是否满足这个性质来判断先手是否必胜。
证明:
当 的时候玩家就输了,最终局面满足结论性质。
如果当前局面是一个奇数,那么下一次一定可以选择一个偶数。
如果是偶数,那么一定可以分割成两个奇数,产生奇数局面。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#define ll long long
//#define int long long
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
#define rop(i,a,b) for(int i=(a);i<(b);++i)
#define rep(i,a,b) for(int i=(a);i>(b);--i)
using namespace std;
int iread(){int x=0,y=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') y=-1;c=getchar();}while('0'<=c&&c<='9'){x=(x<<3)+(x<<1)+(c^'0');c=getchar();}return x*y;}
ll lread(){ll x=0,y=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-') y=-1;c=getchar();}while('0'<=c&&c<='9'){x=(x<<3)+(x<<1)+(c^'0');c=getchar();}return x*y;}
signed main(){int T=iread();while(T--){
int n=iread();
if(n%2) puts("dd wins");
else puts("bb wins");
}return 0;}
这里空空如也







有帮助,赞一个