构造

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

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

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

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

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

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

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

因为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\n",kx+tx,ky);fflush(stdout);int a,b,c;scanf("%d%d%d",&a,&b,&c);return 1;}printf("%d %d\n",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;elsety=1;}if (kx!=500 && ky==500){ty=0;if (kx<500)tx=1;elsetx=-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 upa[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 upa[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 downa[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 downa[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;}
}

转载于:https://www.cnblogs.com/huangchenyan/p/11230368.html

CF1100D Dasha and Chess相关推荐

  1. [CF1100D]Dasha and Chess

    Dasha and Chess 题解 开始看这道题时你会发现这道题数据给得非常奇怪,但可以先不管. 由于车走的都是最优策略,所以国王只有在行列上同时出现2个小兵时才能获胜. 于是乎我们需要构造出一种情 ...

  2. HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. hdu-5794 A Simple Chess(容斥+lucas+dp)

    题目链接: A Simple Chess Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

  4. Codeforces 38B - Chess

    38B - Chess 思路:懂点象棋的规则就可以,看看哪些点可以放马. 代码: #include<bits/stdc++.h> using namespace std; #define ...

  5. BZOJ1801: [Ahoi2009]chess 中国象棋

    BZOJ1801: [Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...

  6. HDU 4832 Chess 排列组合 DP

    Chess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  7. Codeforces Round #394 (Div. 2) A. Dasha and Stairs 水题

    A. Dasha and Stairs 题目连接: http://codeforces.com/contest/761/problem/A Description On her way to prog ...

  8. Aeroplane chess HDU - 4405(期望dp)

    题意: 飞行棋.有n+1格,开始时在0号格子,每一步都要扔一个dice(六个面,概率相同)哪一面朝上他就会向前走x+i步.当x+i大于等于N的时候,游戏结束.另外,地图上有m条航线.第i条航线可以直接 ...

  9. Codeforces Round #732 (Div. 2) D. AquaMoon and Chess 组合数学 + 找规律

    传送门 文章目录 题意: 思路: 题意: 给你一个010101串,当且仅当某个111的某一边i+1,i−1i+1,i-1i+1,i−1有111,这个111可以跟i+2,i−2i+2,i-2i+2,i− ...

最新文章

  1. 360无痕浏览器_高效使用浏览器,探索你不知道的实用功能
  2. linux 内核 虚拟文件系统VFS 路径查找 path_lookup
  3. Rcysoft PDF Watermark Pro中文版
  4. Wpf体系结构的学习
  5. 山海演武传·黄道·第一卷 雏龙惊蛰 第二十二 ~ 二十四章 真龙之剑·星墟列将...
  6. 4道Python基础字典练习题
  7. python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)
  8. Python较为经典的53个Python库
  9. ifamre 大小随页面变_SEO优化中如何让你的页面访问速度更快
  10. Java-For循环
  11. php date( w ),PHP Date()函数详解
  12. 对AI的未来以及优势的一些看法
  13. webstore安装过程 0913
  14. linux救援模式使用yum,linux学习笔记-第二课-yum,救援模式,单用户模式,运行级别...
  15. VMware虚拟机下网络连接的三种模式
  16. 基于 IPIP.NET 进行公网故障排查
  17. Algorithm:数学建模大赛(CUMCM/NPMCM)之05A《长江水质综合评价与预测》
  18. 卷积神经网络概念与原理
  19. 安卓硬件模拟大师_安卓虚拟大师 可以手机运行免root带xp框架模拟器
  20. 必看!云桌面与传统PC六项成本对比

热门文章

  1. python计算机博弈大赛,GitHub - bistu/Dots-and-Boxes: 点格棋
  2. 基于C#的socket聊天室(附源码)
  3. 计算机专业认知实践报告1000,计算机专业实习报告1000字
  4. Ci24R1超低成本高性能 2.4GHz GFSK 无线收发芯片
  5. 官方金山打字通2009
  6. c++期末上机oj题目汇总二(2018北邮信通版)纯干货
  7. 行测中的计算机应用题,广东公务员行测题库:行测每日一练常识应用练习题
  8. gitlab--基础--5.3--CICD--gitlab-ci.yml关键字
  9. 家用3d室内装修设计软件一览
  10. 我们参与投资36Kr股权众筹项目“易途8”的决策过程