1. 程式人生 > 實用技巧 >Codeforces Round #651 (Div. 2)題解

Codeforces Round #651 (Div. 2)題解

Problem B

是這樣,原來的陣列是偶數長度,所以要麼有偶數個奇數和偶數個偶陣列成,要麼奇數偶數都是奇數個,要求gcd不等於1,那麼我們求gcd等於2就好了。直接暴力存奇數偶數,然後輸出就好了。

Problem C

首先我們特判1和2,然後如果先手面臨奇數的情況,先手必勝,如果是沒有奇數因子的偶數,後手必贏,一個數必然可以拆分成為若干個奇數因子和偶數因子相乘,那麼此時如果我把所有奇數因子全部除掉,就形成了沒有奇數因子的偶數,那麼先手必勝,這裡要判斷一下是否這個偶數因子是2.

程式碼實現

#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
#define rep(i,f_start,f_end) for (int i=f_start;i<=f_end;++i)
#define per(i,n,a) for (int i=n;i>=a;i--)
#define MT(x,i) memset(x,i,sizeof(x) )
#define rev(i,start,end) for (int i=start;i<end;i++)
#define inf 0x3f3f3f3f
#define mp(x,y) make_pair(x,y)
#define lowbit(x) (x&-x)
#define MOD 1000000007
#define exp 1e-8
#define N 1000005 
#define fi first 
#define se second
#define pb push_back
typedef long long ll;
const ll INF=0x3f3f3f3f3f3f3f3f;
typedef vector <int> VI;
typedef pair<int ,int> PII;
typedef pair<int ,PII> PIII;
ll gcd (ll a,ll b) {return b?gcd (b,a%b):a; }
inline int read() {
    char ch=getchar(); int x=0, f=1;
    while(ch<'0'||ch>'9') {
        if(ch=='-') f=-1;
        ch=getchar();
    } while('0'<=ch&&ch<='9') {
        x=x*10+ch-'0';
        ch=getchar();
    } return x*f;
}


int main () { 
  int t;
  scanf ("%d",&t);
  while (t--) {
      int n;
      scanf ("%d",&n);
      if (n==1) printf ("FastestFinger\n");
      else if (n==2) printf ("Ashishgup\n");
      else if (n%2==1) printf ("Ashishgup\n");
      else {
          int flag=0;
          for (int i=2;i*i<=n;i++) {
              if (n%i!=0) continue;
              if (i%2==1&&(n/i)!=2) flag=1;
              if ((n/i)%2==1&&i!=2) flag=1;
          }
          if (flag) printf ("Ashishgup\n");
          else printf ("FastestFinger\n");
      }
  }
  return 0;
}