zoukankan      html  css  js  c++  java
  • LA 5059 (找规律 SG函数) Playing With Stones

    题意:

    有n堆石子,两个人轮流取,每次只能取一堆的至少一个至多一半石子,直到不能取为止。

    判断先手是否必胜。

    分析:

    本题的关键就是求SG函数,可是直接分析又不太好分析,于是乎找规律。

    经过一番“巧妙”的分析,有这样一个规律:

    如果n是偶数,SG(n) = n / 2;

    如果n是奇数,SG(n) = SG(n / 2);

    这道题的意义不在于规律是什么,而是要自己能够写出求SG函数值的代码。顺便再体会一下mex(S)的含义。

     1 #include <cstring>
     2 
     3 const int maxn = 100;
     4 int SG[maxn], vis[maxn];
     5 
     6 int main()
     7 {
     8     SG[1] = 0;
     9     for(int i = 2; i <= 30; i++)
    10     {
    11         memset(vis, 0, sizeof(vis));
    12         for(int j = 1; j * 2 <= i; j++) vis[SG[i-j]] = 1;
    13         for(int j = 0; ; j++) if(!vis[j])
    14         {
    15             SG[i] = j;
    16             break;
    17         }
    18         printf("%d ", SG[i]);
    19     }
    20 
    21     return 0;
    22 }
    找规律
     1 #include <cstdio>
     2 
     3 long long SG(long long n)
     4 {
     5     if(n & 1) return SG(n >> 1);
     6     else return (n >> 1);
     7 }
     8 
     9 int main()
    10 {
    11     //freopen("in.txt", "r", stdin);
    12     int T;
    13     scanf("%d", &T);
    14     while(T--)
    15     {
    16         int n;
    17         scanf("%d", &n);
    18         long long a, x = 0;
    19         while(n--)
    20         {
    21             scanf("%lld", &a);
    22             x ^= SG(a);
    23         }
    24         printf("%s
    ", x ? "YES" : "NO");
    25     }
    26 
    27     return 0;
    28 }
    AC
  • 相关阅读:
    MapReduce案例
    Hive学习笔记九
    大数据技术之Hive
    Hive学习笔记八
    Hive学习笔记七
    Hive学习笔记六
    大数据应用技术课程实践--选题与实践方案
    15.手写数字识别-小数据集
    14.深度学习-卷积
    13.垃圾邮件分类2
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4324184.html
Copyright © 2011-2022 走看看