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的

  1. 2*一个质数(以下的质数不包括2)
    A 只能拿质数 , F 胜
  2. 2*一个不是质数的奇数
    一个不是质数的奇数可以分为两个质数,A 拿一个 , F 拿一个 , A 胜
  3. 2的x次方
    F 胜
  4. 2的x次方*奇数
    A 胜

D

题意理解了好长时间

最大值最小,二分
以二分奇数为例
if a[i]<=mid,cnt++;
偶数随便加,与他无关
最后判断 cnt是否 >=k 即可

E

不成立即两序列的01数量不等

相同的位置不用动
只考虑不同的位置
01交替的做法只一次就够
于是就记录01交替的串的数量

posted @   小惰惰  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
/* 鼠标点击求赞文字特效 */
点击右上角即可分享
微信分享提示

目录导航