• C. Number Game(博弈)


    Problem - 1370C - Codeforces

    Ashishgup和FastestFinger玩一个游戏。

    他们从一个数字n开始,轮流玩。在每个回合中,玩家可以做以下任何一个动作。

    用n除以任何大于1的奇数除数。
    如果n大于1,则从n中减去1。
    一个数字的除数包括该数字本身。

    无法走棋的玩家就输掉了比赛。

    Ashishgup先走。如果两人都以最佳状态下棋,则确定游戏的赢家。

    输入
    第一行包含一个整数t(1≤t≤100)--测试案例的数量。接下来是测试用例的描述。

    每个测试用例的唯一一行包含一个整数--n(1≤n≤109)。

    输出
    对于每个测试案例,如果他赢了,就打印 "Ashishgup",否则就打印 "FastestFinger"(不带引号)。

    题解:
    首先

    1F赢

    2A赢

    如果n > 2 并且n%2==1 A赢

    剩下就只有n > 2并且n%2 == 0的情况了

    一个整数可以分解为一些奇数与一些偶数相乘

    当然奇数*奇数仍为奇数,偶数*偶数仍为偶数

    我们可以理解为这样

    j为奇数 o为偶数

    (一).

    j * j *..*j * 2 ==n

    这种情况我们要看前面有几个奇数

    如果只有1个,那么F是必赢的,(只有6)无论怎么操作F是必赢的

    如果有两个以上,我们可以让其变成6的情况,这样A必赢

    (二).

    j *j * .... * o(!=2类似(4,8,16)) == n

    如果我们直接可以除完所有j数,一定是A赢

    总结下来就是

    1. for(int i = 2;i <= k;i++)
    2. {
    3. if(n%i)
    4. {
    5. continue;
    6. }
    7. if(i%2&&(n/i)!=2)
    8. {
    9. f = 1;
    10. }
    11. if((n/i)%2&&(i!=2))
    12. f =1;
    13. }

    换句话讲,只要n中有一个奇因数,并且n/这个奇因数不为2,就是A赢

    完整代码(所有情况)

    1. #include<iostream>
    2. #include<vector>
    3. #include<queue>
    4. #include<algorithm>
    5. #include<cmath>
    6. using namespace std;
    7. int a[200050];
    8. int b[200050];
    9. void solve()
    10. {
    11. int n;
    12. cin >> n;
    13. if(n == 1)
    14. {
    15. cout<<"FastestFinger\n";
    16. return ;
    17. }
    18. if(n == 2)
    19. {
    20. cout<<"Ashishgup\n";
    21. return ;
    22. }
    23. if(n%2)
    24. {
    25. cout<<"Ashishgup\n";
    26. return ;
    27. }
    28. int k = sqrt(n);
    29. int f = 0;
    30. for(int i = 2;i <= k;i++)
    31. {
    32. if(n%i)
    33. {
    34. continue;
    35. }
    36. if(i%2&&(n/i)!=2)
    37. {
    38. f = 1;
    39. }
    40. if((n/i)%2&&(i!=2))
    41. f =1;
    42. }
    43. if(f)
    44. {
    45. cout<<"Ashishgup\n";;
    46. }
    47. else
    48. {
    49. cout<<"FastestFinger\n";
    50. }
    51. }
    52. int main()
    53. {
    54. int t;
    55. cin >> t;
    56. while(t--)
    57. {
    58. solve();
    59. }
    60. }

  • 相关阅读:
    这些国外客户真直接
    canvas 学习
    第13/100天 阅读笔记
    故障诊断开源代码推荐 | 轴承故障诊断迁移学习综述,免费获取!
    前端小案例-图片存放在远端服务器
    【eProsima Fast DDS(1)】安装eProsima Fast DDS
    VBA一个sheet多行按照固定行数分割到多个excel中
    【STL】关联式容器的使用(12)
    ZXMPS330 全新原装产品 规格及开局设置
    依汇心理系统搭建平台模式
  • 原文地址:https://blog.csdn.net/m0_64158084/article/details/127670481