D 宿命之间的对决【2023牛客寒假算法基础集训营3】
D 宿命之间的对决
题意
- 现在给定一个正整数n,小红和小紫轮流操作,每次取n的一个因子x,使得n减去x。谁先将n减到0谁输。
小红先手操作,她想知道在双方足够聪明的情况下,谁会获得最终的胜利?
思路
- 奇偶相加减,(同偶异奇)
设奇数a为
,奇数b为 ,偶数c为 ,偶数d为 .( )
奇奇 偶
奇偶 奇
偶偶 偶
偶奇 奇
-
奇数的因子中一定没有偶数,偶数的因子中一定有奇数和偶数
奇数只能变为偶数,偶数总能变为奇数 -
递推
时,先手只能减去因子1变为0,因此先手必败
时,先手可以选择减去因子1,后手变为 时的必败态,因此 时先手必胜
时,先手只能减去因子1,后手变为 时的必生态,因此 时先手必败
时,先手可以选择减去因子1,后手变为 时的必败态,因此 时先手必胜
偶数,偶数总能变为奇数,奇数只能变为偶数,因此先手只要每次减为奇数就能保持自己是偶数
奇数,奇数只能变为偶数,偶数总能变为奇数,因此后手只要每次减为奇数就能保持自己是偶数
偶数先手总是能转变为前后已有的后手的必败态,奇数先手只能转变为前后已有的后手的必胜态
偶数先手必胜,奇数先手必败
代码
点击查看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
#define X first
#define Y second
typedef long long LL;
const char nl = '\n';
void solve(){
LL n;
cin >> n;
if(n%2)cout << "yukari";
else cout << "kou";
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
solve();
}
标签:
2023牛客寒假算法基础集训营
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】