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;
}

Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)的更多相关文章

  1. Codeforces Round #651 (Div. 2) C. Number Game(数论)

    题目链接:https://codeforces.com/contest/1370/problem/C 题意 给出一个正整数 $n$,Ashishgup 和 FastestFinger 依次选择执行以下 ...

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

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

  3. Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)

    Codeforces Round #521 (Div. 3)  E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...

  4. Codeforces Round #651 (Div. 2) A Maximum GCD、B GCD Compression、C Number Game、D Odd-Even Subsequence

    A. Maximum GCD 题意: t组输入,然后输入一个n,让你在区间[1,n]之间找出来两个不相等的数a,b.求出来gcd(a,b)(也就是a,b最大公约数).让你求出来最大的gcd(a,b)是 ...

  5. Codeforces Round #266 (Div. 2) C. Number of Ways

    You've got array a[1], a[2], ..., a[n], consisting of n integers. Count the number of ways to split ...

  6. Codeforces Round #651 (Div. 2) A. Maximum GCD(数论)

    题目链接:https://codeforces.com/contest/1370/problem/A 题意 有 $n$ 个数大小分别为 $1$ 到 $n$,找出两个数间最大的 $gcd$ . 题解 若 ...

  7. Codeforces Round #651 (Div. 2) B. GCD Compression(数论)

    题目链接:https://codeforces.com/contest/1370/problem/B 题意 给出 $2n$ 个数,选出 $2n - 2$ 个数,使得它们的 $gcd > 1$ . ...

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

    题目链接:https://codeforces.com/contest/1370/problem/D 题意 给出一个含有 $n$ 个数的数组 $a$,从中选出 $k$ 个数组成子序列 $s$,使得 $ ...

  9. Codeforces Round #651 (Div. 2) E. Binary Subsequence Rotation(dp)

    题目链接:https://codeforces.com/contest/1370/problem/E 题意 给出两个长为 $n$ 的 $01$ 串 $s$ 和 $t$,每次可以选择 $s$ 的一些下标 ...

  10. Codeforces Round #651 (Div. 2)

    感觉自己无可救药了. A题:找到小于等于n的两个不同的数的gcd最大是多少,显然是floort(n/2).设这两数是a * gcd, b * gcd然后gcd(a,b) = 1,那么gcd要尽量大,不 ...

随机推荐

  1. kettle(docker版)系列文章02---hello world

    目标:将mysql库中表的数据定时转到另外一个表中 1.在mysql中新建目标表test_kettle,有字段id,productName,createtime 2.连接mysql数据库 DB连接-- ...

  2. Gin 项目引入热加载

    目录 一.什么是热加载 二.Air 2.1 介绍 2.2 特性 特性: 2.3 相关文档 2.4 安装 推荐使用 install.sh 使用 go install 2.5 配置环境变量 2.6 使用 ...

  3. [3] 以逆向的角度来看循环语句——do、while、for的比较

    [3] 以逆向的角度来看循环语句--do.while.for的比较 1. do循环 ​ 先执行循环体,后比较判断 #include <stdio.h> int main(int argc, ...

  4. C# await和Result对比

    1.Result 上图是微软官网的截图,由图可知在使用GetXXXX的方法的时候,会阻塞调用其他线程,直到当前异步操作完成,相当于调用wait方法.但是使用异步编程应该避免使用TASK.WAIT或TA ...

  5. dwm 美化

    在之前的博客中,我们将arch linux这个系统进行了一些美化,当然也是仅仅做到能看这个地步,要说跟网上其他那些惊艳的特效对比,肯定是不如的.但是我一直秉持一个观点,美化应该适可而止,只要不是丑的你 ...

  6. 2.3 Windows驱动开发:内核字符串转换方法

    在内核编程中字符串有两种格式ANSI_STRING与UNICODE_STRING,这两种格式是微软推出的安全版本的字符串结构体,也是微软推荐使用的格式,通常情况下ANSI_STRING代表的类型是ch ...

  7. 14.2 Socket 反向远程命令行

    在本节,我们将继续深入探讨套接字通信技术,并介绍一种常见的用法,实现反向远程命令执行功能.对于安全从业者而言,经常需要在远程主机上执行命令并获取执行结果.本节将介绍如何利用 _popen() 函数来启 ...

  8. Python 排序与查找算法收集

    Python 语言实现几种不同的排序算法,代码来自于老男孩Python全栈开发,学习教程! import random import time import copy import sys def c ...

  9. 【奶奶看了都会】2分钟学会制作最近特火的ikun幻术图

    1.效果展示 最近ikun幻术图特别火啊,在网上能找到各种各样的ikun姿势图片,这些图片都是AI绘制的,能和风景完美融合在一起,今天小卷就来教大家怎么做这种图片 先看看图片效果 B站视频链接: 仿佛 ...

  10. ElasticSearch7.3学习(三)----采用restful风格 批量(bulk)增删改

    Bulk 操作是将文档的增删改查一些列操作,通过一次请求全都做完.目的是减少网络传输次数. 语法: POST /_bulk {"action": {"metadata&q ...