Codeforces Round #651 (Div. 2) C. Number Game (博弈,数学)

Posted lr599909928

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #651 (Div. 2) C. Number Game (博弈,数学)相关的知识,希望对你有一定的参考价值。

技术图片

  • 题意:对于正整数(n),每次可以选择使它变为(n-1)或者(n/t) ((n mod t=0)(t)为奇数),当(n=1)时便不可以再取,问先手赢还是后手赢.

  • 题解:首先特判(1)(2)的情况,然后显然如果(n)是奇数,一定是先手赢.

    ? 如果(n)是偶数,那么我们去找它的奇数因子.

    ? 如果没有,那么先手只能减一,后手直接赢.

    ? 如果有,那么我们直接将它的所有奇数因子拿走,剩下一个孤零零的偶数给后手,如果这个偶数不是(2)的话,先手赢,否则后手赢.

  • 代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <set>
    #include <unordered_set>
    #include <unordered_map>
    #define ll long long
    #define fi first
    #define se second
    #define pb push_back
    #define me memset
    const int N = 1e6 + 10;
    const int mod = 1e9 + 7;
    const int INF = 0x3f3f3f3f;
    using namespace std;
    typedef pair<int,int> PII;
    typedef pair<ll,ll> PLL;
    
    int t;
    int n;
    
    bool check(int x){
    	for(int i=2;i<=x/i;++i){
    		if(x%i==0){
    			if(i!=2 && x/i!=2){
    				if(i%2==1 || (x/i)%2==1){
    					return true;
    				}
    			}
    		}
    	}
    	return false;
    }
    
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
    	cin>>t;
    	 while(t--){
    	 	cin>>n;
    	 	if(n==1){
    	 		cout<<"FastestFinger"<<endl;
    	 	}
    	 	else if((n%2==1&&n>1)||n==2){
    	 		cout<<"Ashishgup"<<endl;
    	 	}
    	 	else{
    	 		if(check(n)){
    	 			cout<<"Ashishgup"<<endl;
    	 		}
    	 		else{
    	 			cout<<"FastestFinger"<<endl;
    	 		}
    	 	}
    	 	
    	 }
        return 0;
    }
    

以上是关于Codeforces Round #651 (Div. 2) C. Number Game (博弈,数学)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #651 (Div. 2) E - Binary Subsequence Rotation 思维

Codeforces Round #651 (Div. 2) C. Number Game (博弈,数学)

Codeforces Round #651 (Div. 2) D. Odd-Even Subsequence(二分)

Codeforces Round #651 (Div. 2) D - Odd-Even Subsequence 二分

cf之路,1,Codeforces Round #345 (Div. 2)

Codeforces Round #436 E. Fire(背包dp+输出路径)