zoukankan      html  css  js  c++  java
  • CCNU 2012.7.8 Problem H

    Problem H
    Description
      喵星人和汪星人玩游戏。
      这个游戏是这样的,有n个石子排成一排,其中第m个是白色的,其他都是黑色的,喵星人先走,汪星人后走,每步可以颠倒任意连续k个石头的顺序,且这k个石头中必须存在白色石头。谁先将白色石头移动到位置l谁就获胜,假设喵星人和汪星人都是选择最优的走法,问谁将获胜。
    Input
      第一行输入一个数T,表示测试数据个数,对于每组测试数据,输入四个数n,m,k,l(1<n<=10^6,1<=m,k,l<=n),数据保证刚开始时白色石头不在位置l。
    Output
      对于每组测试数据,如果喵星人获胜,输出"Miao",如果汪星人获胜,输出"Wang",如果谁也无法获胜,输出"Draw",输出时不带引号。
    Sample Input
      3
      5 1 2 2
      5 5 2 3
      3 1 1 2
    Sample Output
      Miao
      Wang
      Draw
    Hint
      第一组数据,五个石头排列为白黑黑黑黑,因此喵星人把前两个石头颠倒顺序可得黑白黑黑黑,此时白色石头位于位置2,因此喵星人获胜。
      第二组数据,五个石头排列为黑黑黑黑白,每次可以颠倒任意两个石头的顺序,但是由于这两个石头必须有白色石头存在,因此喵星人只能颠倒最后两个石头,得到黑黑黑白黑,之后由于汪星人选择的是最优走法,因此,汪星人颠倒3~4个石头得到黑黑白黑黑,此时白色石头位于第三个位置,汪星人获胜。
      第三组数据,由于只能翻一个石头,又因为一定要包含白色石头,因此每次翻完之后结果是不变的,因此谁也无法获胜,输出Draw。
    题目

    miao先走,如果存在必胜的局势,那么它现在一步就可以赢,或者说存在某种坑爹的局势(白棋在角落,由于每次移动必须操作白棋的必败局势),那么wang赢,否则的话,两个人完全可以进入死循环(一个人走,另一个人恢复)

    所以开始就要判一步能不能赢,模拟一下操作发现对于所有的当前状态m,操作数为k是奇数时,下一个状态不能是m+2*i+1,当操作数是偶数时,下一个状态不能是m+2*i,而且范围在1~n,翻转的地方处理是注意点边界范围

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    using namespace std;
    bool is_ok(int n,int m,int k,int l)
    {
        int mi=max(1,m-k+1);
        mi=mi+k-1-m+mi;
        int mx=min(n,m+k-1);
        mx=mx-k+1-m+mx;
        if(l>=mi && l<=mx && abs(m-l-k)%2 )
            return true;
        return false;
    }
    int main()
    {
        freopen("H.in","r",stdin);
        freopen("H.txt","w",stdout);
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int m,n,l,k;
            scanf("%d%d%d%d",&n,&m,&k,&l);
            if(is_ok(n,m,k,l))
                printf("Miao\n");
            else
            {
                int i;
                for(i=1;i<=n;i++)
                {
                    // 从m到i可行,但是从i到l不可行,两人sb死循环
                    if(is_ok(n,m,k,i)==true&&is_ok(n,i,k,l)==false)
                    {
                        printf("Draw\n");
                        break;
                    }
                }
                if(i==n+1)
                    printf("Wang\n");
            }
        }
        return 0;
    }
    View Code
    60
    2 1 2 2
    3 1 1 2
    5 1 2 2
    5 5 2 3
    5 5 2 2
    2 1 1 2
    2 2 1 1
    2 1 2 2
    2 2 2 1
    3 1 1 2
    3 1 1 3
    3 2 1 1
    3 2 1 3
    3 3 1 1
    3 3 1 2 
    3 1 2 2
    3 1 2 3
    3 2 2 1
    3 2 2 3
    3 3 2 1
    3 3 2 2
    3 1 3 2
    3 1 3 3
    3 2 3 1
    3 2 3 3
    3 3 3 1
    3 3 3 2
    10 1 8 5
    9 3 3 9
    6 6 4 2
    6 1 3 4
    8 2 5 7
    9 6 8 7
    7 6 2 2
    10 3 9 10
    10 5 10 6
    10 4 2 3
    8 8 1 6
    10 5 9 8
    9 8 7 4
    10 9 2 10
    9 7 3 6
    5 3 2 1
    9 1 5 6
    7 7 3 4
    8 3 8 5
    10 10 9 5
    1000000 131525 705444 275309
    1000000 251567 705444 6097
    1000000 804588 705444 292263
    1000000 791181 347709 721626
    1000000 43795 347709 506697
    1000000 595477 347709 275837
    1000000 157692 569590 680270
    1000000 141323 569590 144412
    1000000 127671 569590 464318
    1000000 418768 623197 388979
    1000000 205057 623197 459153
    1000000 187669 623197 410751
    1000000 279207 267101 658544
    H.in
    Miao
    Draw
    Miao
    Wang
    Draw
    Draw
    Draw
    Miao
    Miao
    Draw
    Draw
    Draw
    Draw
    Draw
    Draw
    Miao
    Wang
    Miao
    Miao
    Wang
    Miao
    Draw
    Miao
    Draw
    Draw
    Miao
    Draw
    Wang
    Draw
    Wang
    Draw
    Draw
    Draw
    Draw
    Draw
    Miao
    Miao
    Draw
    Draw
    Miao
    Miao
    Draw
    Draw
    Draw
    Draw
    Draw
    Draw
    Wang
    Draw
    Miao
    Draw
    Wang
    Miao
    Wang
    Draw
    Miao
    Draw
    Miao
    Wang
    Draw
    H.out
  • 相关阅读:
    adt 下载有时候下载不下来
    phonegap 2.5.0 创建项目
    jquerymobile tap事件被触发两次。
    phonegap Resource ID #0x0
    淘宝客淘宝开放平台要UTF编码才能获取数据
    js document.addEventListener 注册事件,
    jquerymobile 转场之后不执行onload事件
    我的第一篇博客
    心情
    箭头css
  • 原文地址:https://www.cnblogs.com/overflow/p/3134862.html
Copyright © 2011-2022 走看看