首页 > 其他分享 >Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)

Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)

时间:2023-12-22 13:35:21浏览次数:41  
标签:cnt cout 奇数 必败 Number long Codeforces Game define

C. Number Game
我们考虑那些状态是必胜态

  1. 我的回合时n为奇数(除1外),直接除以n则必胜
  2. 下面偶数的情况稍复杂
    • 偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败态
    • 偶数一定含2的因子,\(n=2^k*q,q为奇数\)
    • 当\(k=1时如果q\)是一个质数那么只能除一次q这样的话,对手就会得到2我们就必败,如果q不是质数就可以进行质因数分解,我们只留下最小的一个质因数,其余的都是我们本次操作要除掉的数,也就是对手会得到\(2*q,其中q为质数,这样对手就进入了必败态\)
    • 当\(k>1时n=2^k*q我们只需要把q除掉,剩下2^k为必败态因为没有奇因子\)只能-1变为奇数

综上我们就讨论完了所有情况
代码有点丑写的

#include <bits/stdc++.h> 
#define rep(i,a,b) for(register int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(register int i = (a); i >= (b); --i)
#define ls p<<1
#define rs p<<1|1
#define PII pair<int, int>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define debug(a) cout<<#a<<"="<<a<<endl;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 0x3f3f3f3f 

using namespace std;
const int N = 1e7+10;
int t; 
int primes[N], cnt[N], m;
void solve()
{
	int n; cin >> n;
	rep(i,1,m)	primes[i]=0, cnt[i]=0;
	if(n==1)
	{
		cout << "FastestFinger" << endl;
		return;	
	}
	if(n==2||n%2==1)
	{
		cout << "Ashishgup" << endl;
		return;
	}
	m=0;
	rep(i,2,n/i)
	{
		if(n%i==0)
		{
			primes[++m]=i;
			while(n%i==0)	
			{
				cnt[m]++;
				n/=i;	
			}
		}
	}	
	if(n>1)
	{
		primes[++m]=n;
		cnt[m]=1;
	}
	int num2=0, other=0; 
	rep(i,1,m)
	{
		if(primes[i]==2)	num2+=cnt[i];
		else	other+=cnt[i];
//		cout<<primes[i]<<' '<<cnt[i]<<endl;
	}
	if(num2==1)
	{
		if(other>=2)	
		{
			cout << "Ashishgup" << endl;
			return;
		}
		else
		{
			cout << "FastestFinger" << endl;
			return;
		}
	}
	else
	{
		if(other>=1)
		{
			cout << "Ashishgup" << endl;
			return;
		}
		else
		{
			cout << "FastestFinger" << endl;
			return;
		}
	}
	cout << "FastestFinger" << endl;
}

int main()
{
	IOS	
//  	freopen("1.in", "r", stdin);
	cin >> t;
	while(t --)	
	solve();
	return 0;
}

标签:cnt,cout,奇数,必败,Number,long,Codeforces,Game,define
From: https://www.cnblogs.com/cxy8/p/17921384.html

相关文章

  • 『LeetCode』2. 两数相加 Add Two Numbers
    『1』迭代法classSolution{//Iteration//Nisthesizeofl1,Misthesizeofl2//TimeComplexity:O(max(M,N))//SpaceComplexity:O(max(M,N))ifdummyiscountedelseO(1)publicListNodeaddTwoNumbers(ListNodel1,ListNodel2)......
  • [Codeforces] CF1579C Ticks
    CF1579CTicks题意\(n\timesm\)的棋盘,左上角和右下角坐标分别为\((1,1),(n,m)\),一开始每个格子为白色。每次操作可以选择一个格子\((x,y)\)以及左上角和右上角方向的\(d\)个连续格子染成黑色,并将其称为一个大小为\(d\)的对勾图案。如果多个对勾图案重复对一个格......
  • [Codeforces] CF1811E Living Sequence
    CF1811ELivingSequence这道题洛谷题解的思路比我的更好,可以参考一下题解,但是没人提到我这种做法题意给定一个正整数\(k\)\((1\lek\le10^{12})\),请你输出第\(k\)个数字里没有4的正整数。思路设\(f_i\)表示前\(10^i\)个\(i\)位数里边不含4的数的个数,列举几个如......
  • [Codeforces] CF1817A Almost Increasing Subsequence
    CF1817AAlmostIncreasingSubsequence题意给定长度为\(n\)一个序列\(a\)以及\(q\)次询问,每次询问给出\(l\)和\(r\),找出序列\(a\)在\([l,r]\)内最长的几乎递增子序列。对于几乎递增的定义:如果一个序列中不存在连续的三个数\(x\),\(y\),\(z\),使得\(x\gey\ge\......
  • Codeforces Round 916 (Div. 3)
    目录写在前面ABCDE1/E2FG1G2写在最后写在前面比赛地址:https://codeforces.com/contest/1914。第二天没早八打个div3休闲娱乐保持下手感,然而div3都AK不了了,纯纯废物一个,天天上大学导致的。唉,一学期碰上好几个byd恼弹老师,大学一秒也不想上了,折磨。马娘台服马上1.5周......
  • Educational Codeforces Round 160 (Rated for Div. 2)
    A.RatingIncrease字符串处理#include<bits/stdc++.h>usingnamespacestd;voidsolve(){ strings; cin>>s; intn=s.size(); s=""+s; for(inti=1;i<=n-1;i++){ stringt=""; for(intj=1;j<=i;j++){ t=t+s[j]; } ......
  • E2. Game with Marbles (Hard Version)
    原题链接导论,有点博弈论的感觉?每个人轮流选一个大家都有的球,然后自己扣一个球,对方扣完。问女生剩下的球减去男生剩下的球,最大值是多少?一些条件1.初始每个人每种球都有2.女生想使答案值大一点,男生想使答案值小一点,换句话说,女生想使\(A\)值大一点,男生想使\(B\)值大一点,每个人都......
  • Codeforces Round 916 (Div. 3)
    A.ProblemsolvingLogmap枚举字母#include<bits/stdc++.h>usingnamespacestd;voidsolve(){ intn; strings; cin>>n>>s; intans=0; s=""+s; map<char,int>mp; for(inti=1;i<=n;i++){ mp[s[i]]++; } for(autoc:mp)......
  • Codeforces Round 916 (Div. 3)(A~E2)
    A统计一下每个字母的出现次数然后输出即可#include<bits/stdc++.h>#definerep(i,a,b)for(registerinti=(a);i<=(b);++i)#definefep(i,a,b)for(registerinti=(a);i>=(b);--i)#definelsp<<1#definersp<<1|1#definePIIpair<int,int&......
  • CF1866B Battling with Numbers 题解
    前置知识:如果\(p=x^a,q=x^b\),那么\(\gcd(p,q)=x^{\min(a,b)},\operatorname{lcm}(p,q)=x^{\max(a,b)}\)。对于每个\(x\ina_i\),令\(x\)在\(Y\)中的指数为\(d_i\)(实际上不一定),计算贡献时,考虑将\(b_i\)与\(d_i\)分别放入\(p\)和\(q\)中:如果\(b_i<d_i\),贡献为......