zoukankan      html  css  js  c++  java
  • Paint Chain HDU

    题目链接:https://vjudge.net/problem/HDU-3980

    题意:由n个石头组成的环,每次只能取连续的M个,最后不能取得人输。

    思路:这样就可以先把它变成链,然后在链上枚举取m个连续点,每次都可以将这条链分成两部分,相当于两个子游戏。对于一个链,一共有n-m-i个子游戏对,用vis数组标记好这些子游戏对的异或值,最后就可以找出sg[n]。

     

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int sg[1010],vis[1010];
     5 int n,m;
     6 void getsg(int len)
     7 {
     8   memset(sg,0,sizeof sg);
     9   for(int i=1;i<=len;i++)
    10   {
    11     memset(vis,0,sizeof vis);
    12     for(int j=0;i-j-m>=0;j++)
    13     {
    14       vis[sg[i-j-m]^sg[j]]=1;
    15     }
    16     for(int j=0;;j++)
    17     {
    18       if(!vis[j])
    19       {
    20         sg[i]=j;
    21         break;
    22       }
    23     }
    24   }
    25 }
    26 int main()
    27 {
    28   int t,k=0;
    29   cin>>t;
    30   while(t--)
    31   {
    32     cin>>n>>m;
    33     printf("Case #%d: ",++k);
    34     getsg(n-m);
    35     if(n<m||sg[n-m]) puts("abcdxyzk");
    36     else puts("aekdycoin");
    37   }
    38   return 0;
    39 }

     

     

  • 相关阅读:
    原根
    FFT
    bzoj3991[SDOI2015]寻宝游戏
    bzoj3990[SDOI2015]排序
    序列自动机
    bzoj4032[HEOI2015]最短不公共子串
    2015.8.28 字符串
    bzoj2821作诗
    bzoj2741【FOTILE模拟赛】L
    一个牛人给java初学者的建议
  • 原文地址:https://www.cnblogs.com/zpj61/p/13571592.html
Copyright © 2011-2022 走看看