Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)
C. Number Game
我们考虑那些状态是必胜态
- 我的回合时n为奇数(除1外),直接除以n则必胜
- 下面偶数的情况稍复杂
- 偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败态
- 偶数一定含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(数学思维数论)的更多相关文章
- Codeforces Round #651 (Div. 2) C. Number Game(数论)
题目链接:https://codeforces.com/contest/1370/problem/C 题意 给出一个正整数 $n$,Ashishgup 和 FastestFinger 依次选择执行以下 ...
- Codeforces Round #651 (Div. 2) C. Number Game (博弈,数学)
题意:对于正整数\(n\),每次可以选择使它变为\(n-1\)或者\(n/t\) (\(n\ mod\ t=0\)且\(t\)为奇数),当\(n=1\)时便不可以再取,问先手赢还是后手赢. 题解:首先 ...
- Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)
Codeforces Round #521 (Div. 3) E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...
- 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)是 ...
- 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 ...
- Codeforces Round #651 (Div. 2) A. Maximum GCD(数论)
题目链接:https://codeforces.com/contest/1370/problem/A 题意 有 $n$ 个数大小分别为 $1$ 到 $n$,找出两个数间最大的 $gcd$ . 题解 若 ...
- Codeforces Round #651 (Div. 2) B. GCD Compression(数论)
题目链接:https://codeforces.com/contest/1370/problem/B 题意 给出 $2n$ 个数,选出 $2n - 2$ 个数,使得它们的 $gcd > 1$ . ...
- Codeforces Round #651 (Div. 2) D. Odd-Even Subsequence(二分)
题目链接:https://codeforces.com/contest/1370/problem/D 题意 给出一个含有 $n$ 个数的数组 $a$,从中选出 $k$ 个数组成子序列 $s$,使得 $ ...
- Codeforces Round #651 (Div. 2) E. Binary Subsequence Rotation(dp)
题目链接:https://codeforces.com/contest/1370/problem/E 题意 给出两个长为 $n$ 的 $01$ 串 $s$ 和 $t$,每次可以选择 $s$ 的一些下标 ...
- Codeforces Round #651 (Div. 2)
感觉自己无可救药了. A题:找到小于等于n的两个不同的数的gcd最大是多少,显然是floort(n/2).设这两数是a * gcd, b * gcd然后gcd(a,b) = 1,那么gcd要尽量大,不 ...
随机推荐
- 在ECS中安装Docker在内部访问RDS数据库
Navicat连接阿里云RDS数据库入门 https://blog.csdn.net/fenxunkao0106/article/details/106594276 https://www.cnblo ...
- C#不显示小数点0部分
c#去掉小数点后的无效0 ,保留指定位数的小数,比如10.0显示成10,小数部分会四舍五入 float value = 0.0500f; value.ToString("0.##" ...
- tensorflow语法【tf.random.categorical()、tf.clip_by_value()、tf.placeholder()、tf.Session()】
相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...
- C/C++ 实现获取硬盘序列号
获取硬盘的序列号.型号和固件版本号,此类功能通常用于做硬盘绑定或硬件验证操作,通过使用Windows API的DeviceIoControl函数与物理硬盘驱动程序进行通信,发送ATA命令来获取硬盘的信 ...
- “I/O多路复用”和“异步I/O”的前世今生
曾经的VIP服务在网络的初期,网民很少,服务器完全无压力,那时的技术也没有现在先进,通常用一个线程来全程跟踪处理一个请求.因为这样最简单.其实代码实现大家都知道,就是服务器上有个ServerSocke ...
- (C语言)每日代码||2023.12.25||函数传参,传入数组时传递的是数组首元素地址
向函数传入某数组时,可以在函数内修改该数组的元素. #include <stdio.h> void test(char* p, char arr[]) { *p = 'h';//能改变 * ...
- 如何修改11g RAC集群名称
背景:有一套11.2.0.4 RAC集群的环境,为了测试DG,直接复制了一套一模一样的环境,修改过IP之后,依然有问题,无法同时启动. 初步判断是因为在同一子网存在两个同名的集群(都是jystdrac ...
- 2.2 实验:UPX脱壳--《恶意代码分析实战》
Lab01-02.exe 实验内容: 1.将文件上传到http://www.VirusTotal.com 进行分析并查看报告.文件匹配到了已有的反病毒软件特征吗? 2.是否有这个文件被加壳或混淆的任何 ...
- Base64编码的优点与缺点
Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式.它被广泛应用于数据传输和存储,以提升数据的可读性.可传输性和安全性. Base64编码解码 | 一个覆盖广泛主题工具的高效在线平 ...
- CSS加JS实现网页返回顶部功能
最近在设计自己的博客,前端页面在内容很多的时候往下拖动会有滚动条.通常我们都需要一个返回顶部的功能来实现快速来到网页顶部.当然实现方式不止一种,这里我采用的最实用的一种.使用CSS+Jquery方式 ...