zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    CDH6.3.1安装详细步骤(感写B站若泽大数据)
    windows远程ubuntu UI教程
    CentOS7搭建Tensorflow计算环境(cuda+cudnn+jupyterlab(Anaconda3)+pytorch+Tensorflow)
    中国计算机学会推荐国际学术会议和期刊目录-2019
    基于BA网络模型的二部图数据集生成
    GitHub文件的克隆与上传
    博客园中随笔,文章的区别
    Pycharm新建文件时头部模板的配置方法
    asyncio 和aiohttp
    随机UA
  • 原文地址:https://www.cnblogs.com/huangchenyan/p/11230368.html
Copyright © 2011-2022 走看看