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变为奇数

综上我们就讨论完了所有情况

代码有点丑写的

  1. #include <bits/stdc++.h>
  2. #define rep(i,a,b) for(register int i = (a); i <= (b); ++i)
  3. #define fep(i,a,b) for(register int i = (a); i >= (b); --i)
  4. #define ls p<<1
  5. #define rs p<<1|1
  6. #define PII pair<int, int>
  7. #define ll long long
  8. #define ull unsigned long long
  9. #define db double
  10. #define endl '\n'
  11. #define debug(a) cout<<#a<<"="<<a<<endl;
  12. #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
  13. #define INF 0x3f3f3f3f
  14. using namespace std;
  15. const int N = 1e7+10;
  16. int t;
  17. int primes[N], cnt[N], m;
  18. void solve()
  19. {
  20. int n; cin >> n;
  21. rep(i,1,m) primes[i]=0, cnt[i]=0;
  22. if(n==1)
  23. {
  24. cout << "FastestFinger" << endl;
  25. return;
  26. }
  27. if(n==2||n%2==1)
  28. {
  29. cout << "Ashishgup" << endl;
  30. return;
  31. }
  32. m=0;
  33. rep(i,2,n/i)
  34. {
  35. if(n%i==0)
  36. {
  37. primes[++m]=i;
  38. while(n%i==0)
  39. {
  40. cnt[m]++;
  41. n/=i;
  42. }
  43. }
  44. }
  45. if(n>1)
  46. {
  47. primes[++m]=n;
  48. cnt[m]=1;
  49. }
  50. int num2=0, other=0;
  51. rep(i,1,m)
  52. {
  53. if(primes[i]==2) num2+=cnt[i];
  54. else other+=cnt[i];
  55. // cout<<primes[i]<<' '<<cnt[i]<<endl;
  56. }
  57. if(num2==1)
  58. {
  59. if(other>=2)
  60. {
  61. cout << "Ashishgup" << endl;
  62. return;
  63. }
  64. else
  65. {
  66. cout << "FastestFinger" << endl;
  67. return;
  68. }
  69. }
  70. else
  71. {
  72. if(other>=1)
  73. {
  74. cout << "Ashishgup" << endl;
  75. return;
  76. }
  77. else
  78. {
  79. cout << "FastestFinger" << endl;
  80. return;
  81. }
  82. }
  83. cout << "FastestFinger" << endl;
  84. }
  85. int main()
  86. {
  87. IOS
  88. // freopen("1.in", "r", stdin);
  89. cin >> t;
  90. while(t --)
  91. solve();
  92. return 0;
  93. }

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. 在ECS中安装Docker在内部访问RDS数据库

    Navicat连接阿里云RDS数据库入门 https://blog.csdn.net/fenxunkao0106/article/details/106594276 https://www.cnblo ...

  2. C#不显示小数点0部分

    c#去掉小数点后的无效0 ,保留指定位数的小数,比如10.0显示成10,小数部分会四舍五入 float value = 0.0500f; value.ToString("0.##" ...

  3. tensorflow语法【tf.random.categorical()、tf.clip_by_value()、tf.placeholder()、tf.Session()】

    相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...

  4. C/C++ 实现获取硬盘序列号

    获取硬盘的序列号.型号和固件版本号,此类功能通常用于做硬盘绑定或硬件验证操作,通过使用Windows API的DeviceIoControl函数与物理硬盘驱动程序进行通信,发送ATA命令来获取硬盘的信 ...

  5. “I/O多路复用”和“异步I/O”的前世今生

    曾经的VIP服务在网络的初期,网民很少,服务器完全无压力,那时的技术也没有现在先进,通常用一个线程来全程跟踪处理一个请求.因为这样最简单.其实代码实现大家都知道,就是服务器上有个ServerSocke ...

  6. (C语言)每日代码||2023.12.25||函数传参,传入数组时传递的是数组首元素地址

    向函数传入某数组时,可以在函数内修改该数组的元素. #include <stdio.h> void test(char* p, char arr[]) { *p = 'h';//能改变 * ...

  7. 如何修改11g RAC集群名称

    背景:有一套11.2.0.4 RAC集群的环境,为了测试DG,直接复制了一套一模一样的环境,修改过IP之后,依然有问题,无法同时启动. 初步判断是因为在同一子网存在两个同名的集群(都是jystdrac ...

  8. 2.2 实验:UPX脱壳--《恶意代码分析实战》

    Lab01-02.exe 实验内容: 1.将文件上传到http://www.VirusTotal.com 进行分析并查看报告.文件匹配到了已有的反病毒软件特征吗? 2.是否有这个文件被加壳或混淆的任何 ...

  9. Base64编码的优点与缺点

    Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式.它被广泛应用于数据传输和存储,以提升数据的可读性.可传输性和安全性. Base64编码解码 | 一个覆盖广泛主题工具的高效在线平 ...

  10. CSS加JS实现网页返回顶部功能

    最近在设计自己的博客,前端页面在内容很多的时候往下拖动会有滚动条.通常我们都需要一个返回顶部的功能来实现快速来到网页顶部.当然实现方式不止一种,这里我采用的最实用的一种.使用CSS+Jquery方式 ...