• CF1100D Dasha and Chess


    构造

    考虑对于国王的坐标,可以将棋盘分成左上,左下,右上,右下四个区域

    统计出来这些区域的黑车数量

    如果向某一个方向走,那么除其方向反向的区域的黑车不用动以外,其他都要动

    比如向右上走,那么除了左下的区域,其他的区域的黑车都要动

    那么对于一个国王坐标,走到棋盘四个角中的一个角的步数,小于需要移动黑车的数量

    那么在这个坐标是一个必胜点(奇异状态)

    那么将国王先移动到棋盘的中点

    因为666可以分为166,166,167,167

    166+167+167=500

    而国王走到一个端点的步数为499

    500>499

    那么必胜

    #include <bits/stdc++.h>
    using namespace std;
    const int n=666;
    int kx,ky,tx,ty,vi[1100][1100];
    int dx[5],dy[5],tot;
    struct node
    {
        int x,y;
    }sh[1000];
    struct dir
    {
        int num,wh;
    }a[6];
    bool cmp(dir a,dir b)
    {
        return (a.num<b.num);
    }
    bool run()
    {
        tot++;
        if (vi[kx+tx][ky+ty])
        {
            printf("%d %d
    ",kx+tx,ky);
            fflush(stdout);
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            return 1;
        }
        printf("%d %d
    ",kx+tx,ky+ty);
        kx+=tx;ky+=ty;
        fflush(stdout);
        int k,x,y;
        scanf("%d%d%d",&k,&x,&y);
        if (k==-1)
          return 1;
        vi[sh[k].x][sh[k].y]--;
        sh[k].x=x;
        sh[k].y=y;
        vi[sh[k].x][sh[k].y]++;
        return 0;
    }
    int main()
    {
        scanf("%d%d",&kx,&ky);
        for (int i=1;i<=n;i++)
          scanf("%d%d",&sh[i].x,&sh[i].y);
        for (int i=1;i<=n;i++)
          vi[sh[i].x][sh[i].y]++;//注意有可能多个在一起
        if (kx<500)
          tx=1;
        if (kx>500)
          tx=-1;
        if (ky<500)
          ty=1;
        if (ky>500)
          ty=-1;
        while (1)
        {
            if (kx==500 || ky==500)
              break;
            if (run())
              return 0;
        }
        if (kx==500 && ky!=500)
        {
            tx=0;
            if (ky>500)
              ty=-1;
            else
              ty=1;
        }
        if (kx!=500 && ky==500)
        {
            ty=0;
            if (kx<500)
              tx=1;
            else
              tx=-1;
        }
        while (1)
        {
            if (kx==500 && ky==500)
              break;
            if (run())
              return 0;
        }
        for (int i=1;i<=499;i++)
        {
            for (int j=1;j<=499;j++)
            {
                if (vi[i][j])
                {
                    a[1].num+=vi[i][j];//left up
                    a[1].wh=1;
                }
            }
        }
        for (int i=1;i<=499;i++)
        {
            for (int j=501;j<=999;j++)
            {
                if (vi[i][j])
                {
                    a[2].num+=vi[i][j];//right up
                    a[2].wh=2;
                }
            }
        }
        for (int i=501;i<=999;i++)
        {
            for (int j=501;j<=999;j++)
            {
                if (vi[i][j])
                {
                    a[3].num+=vi[i][j];//right down
                    a[3].wh=3;
                }
            }
        }
        for (int i=501;i<=999;i++)
        {
            for (int j=1;j<=499;j++)
            {
                if (vi[i][j])
                {
                    a[4].num+=vi[i][j];//left down
                    a[4].wh=4;
                }
            }
        }
        for (int i=1;i<=4;i++)
          a[i].wh=i;
        dx[1]=1;dx[2]=1;dx[3]=-1;dx[4]=-1;
        dy[1]=1;dy[2]=-1;dy[3]=-1;dy[4]=1;
        sort(a+1,a+1+4,cmp);
        tx=dx[a[1].wh];
        ty=dy[a[1].wh];
        while (1)
        {
            if (run())
              return 0;
            if (kx==1 || kx==999 || ky==0 || ky==999)
              break;
        }
        tx=-tx;ty=-ty;
        while (tot<=2000)
        {
            if (run())
              return 0;
            if (kx==1 || kx==999 || ky==0 || ky==999)
              break;
        }
    }
  • 相关阅读:
    香港中小学校资料
    几本图形学的书
    windows下MBCS和UNICODE编码的转换
    索引测试代码
    Ext.Net一些特别问题(有些未验证)
    MSSQL优化之索引优化(转)
    [转载红鱼儿]kbmmw 开发点滴:kbmmW服务端事务控制
    Devexpress VCL Build v2012 vol 12.2.2 发布
    [转载红鱼儿]kbmmw 开发点滴:kbmMWQuery插入记录
    2013年新年礼物CrossFPC 终于出来了
  • 原文地址:https://www.cnblogs.com/huangchenyan/p/11230368.html
Copyright © 2020-2023  润新知