CF1370
难度:红橙黄绿蓝
其实后面还有两个紫,但紫的交互
A
直接输出 n/2
B
gcd>1 ,最简单的就是gcd=2
也就是全是偶数
所以把 a 序列的奇数两两相加,偶数两两相加
C
额
先放代码
#include <bits/stdc++.h>
using namespace std;
bool isprime(int p){
//cout<<p<<endl;
for(int i=2;i*i<=p;i++){
// cout<<p<<" ";
if(p%i==0)return 0;
}
return 1;
}
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
if(n==1){cout<<"FastestFinger"<<endl;continue;}
if(n==2||n%2){cout<<"Ashishgup"<<endl;continue;}
n>>=1;
if(isprime(n)){cout<<"FastestFinger"<<endl;continue;}
if(n%2){cout<<"Ashishgup"<<endl;continue;}
while(n%2==0)n>>=1;
if(n==1){cout<<"FastestFinger"<<endl;continue;}
cout<<"Ashishgup"<<endl;}
return 0;
}
看出来什么了吗
博弈论就是一个巨大的分类讨论
易知:得到1就输了,得到2就赢了
于是
if(n==1){cout<<"FastestFinger"<<endl;continue;}
if(n==2||n%2){cout<<"Ashishgup"<<endl;continue;}
剩下的情况就是 n 是不为 2 的偶数
这种情况是绝不能-1的
- 2*一个质数(以下的质数不包括2)
A 只能拿质数 , F 胜 - 2*一个不是质数的奇数
一个不是质数的奇数可以分为两个质数,A 拿一个 , F 拿一个 , A 胜 - 2的x次方
F 胜 - 2的x次方*奇数
A 胜
D
题意理解了好长时间
最大值最小,二分
以二分奇数为例
if a[i]<=mid,cnt++;
偶数随便加,与他无关
最后判断 cnt是否 >=k 即可
E
不成立即两序列的01数量不等
相同的位置不用动
只考虑不同的位置
01交替的做法只一次就够
于是就记录01交替的串的数量
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探