传送门:QAQQAQ

题意:This is an interactive task.

999*999国际象棋棋盘中有一个王和666个车,玩家走王,电脑走车,玩家先走,玩家的目的是让对方的车将到自己的王,电脑的车可以“飞”(即移动到棋盘上任意一点),但吃子规则不变,玩家必须要在2000步之内获胜

思路:哇塞这是国际象棋!好激动好激动!(然而没做出来)

我们考虑一般情况:根据王的位置一横一竖把棋盘分成4个部分,加入王往一个方向走(这里假设往左上走),则除了背对他的方向其它所有车都要闪开(即左上,右上,左下)

假如我们从左上角开始赶车:有666个车要被赶走,王走到右下角(即把车赶光)要998步,太多了;

那么如果王在最中间呢?——最少的一个方向最多也就166个,也就是王在中间背对车个数最少的方向走最少也可以赶走500个车,而王走到最底下只要499步——有2个车来不及闪开了

所以我们先把王移到正中间,再背对车个数最少的方向逼近就行了

活生生打成了码农题(200多行,有很多函数是多余的),一直说越界(其实电脑骗人,只要wronganswer就说越界),加了很多特判,结果发现把王的位置也读入的时候mp赋值为1了

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int inf=;
  4. int dx[]={-,-,,};
  5. int dy[]={-,,-,};
  6.  
  7. struct node{
  8. int x,y;
  9. }a[];
  10. int mp[][];
  11.  
  12. void init()
  13. {
  14. memset(mp,,sizeof(mp));
  15. for(int i=;i<=;i++)
  16. {
  17. scanf("%d%d",&a[i].x,&a[i].y);
  18. if (i) mp[a[i].x][a[i].y]++;//之前没判i!=0
  19. }
  20. }
  21.  
  22. void print()
  23. {
  24. printf("%d %d\n",a[].x,a[].y);
  25. fflush(stdout);
  26. }
  27.  
  28. void up()
  29. {
  30. a[].x--;
  31. print();
  32. }
  33.  
  34. void down()
  35. {
  36. a[].x++;
  37. print();
  38. }
  39.  
  40. void left()
  41. {
  42. a[].y--;
  43. print();
  44. }
  45.  
  46. void right()
  47. {
  48. a[].y++;
  49. print();
  50. }
  51.  
  52. void leftup()
  53. {
  54. if(mp[a[].x-][a[].y-])
  55. {
  56. up();
  57. return;
  58. }
  59. a[].x--; a[].y--;
  60. print();
  61. }
  62.  
  63. void leftdown()
  64. {
  65. if(mp[a[].x+][a[].y-])
  66. {
  67. down();
  68. return;
  69. }
  70. a[].x++; a[].y--;
  71. print();
  72. }
  73.  
  74. void rightdown()
  75. {
  76. if(mp[a[].x+][a[].y+])
  77. {
  78. down();
  79. return;
  80. }
  81. a[].x++; a[].y++;
  82. print();
  83. }
  84.  
  85. void rightup()
  86. {
  87. if(mp[a[].x-][a[].y+])
  88. {
  89. up();
  90. return;
  91. }
  92. a[].x--; a[].y++;
  93. print();
  94. }
  95.  
  96. void read()
  97. {
  98. int id,xx,yy;
  99. scanf("%d%d%d",&id,&xx,&yy);
  100. if(id==-)
  101. {
  102. exit();
  103. }
  104. mp[a[id].x][a[id].y]--;
  105. a[id].x=xx; a[id].y=yy;
  106. mp[a[id].x][a[id].y]++;
  107. }
  108.  
  109. void ready()
  110. {
  111. while(a[].x<)
  112. {
  113. down();
  114. read();
  115. }
  116. while(a[].x>)
  117. {
  118. up();
  119. read();
  120. }
  121. while(a[].y>)
  122. {
  123. left();
  124. read();
  125. }
  126. while(a[].y<)
  127. {
  128. right();
  129. read();
  130. }
  131. }
  132.  
  133. int dir,minn=inf,tmp;
  134. void judge_direction()
  135. {
  136. int cnt[]={,,,};//0:leftup 1:rightup 2:leftdown 3:rightdown
  137. for(int i=;i<=;i++)
  138. {
  139. for(int j=;j<=;j++)
  140. {
  141. if(i<)
  142. {
  143. if(j<) cnt[]+=mp[i][j];
  144. if(j>) cnt[]+=mp[i][j];
  145. }
  146. if(i>)
  147. {
  148. if(j<) cnt[]+=mp[i][j];
  149. if(j>) cnt[]+=mp[i][j];
  150. }
  151. }
  152. }
  153. for(int i=;i<;i++)
  154. {
  155. if(minn>cnt[i]) minn=cnt[i],tmp=i;
  156. }
  157. dir=-tmp;
  158. }
  159.  
  160. void move(int dir)
  161. {
  162. if(dir==) leftup();
  163. else if(dir==) rightup();
  164. else if(dir==) leftdown();
  165. else rightdown();
  166. }
  167.  
  168. void solve()
  169. {
  170. while()
  171. {
  172. move(dir);
  173. read();
  174. }
  175. }
  176.  
  177. int main()
  178. {
  179. init();
  180. ready();
  181. judge_direction();
  182. solve();
  183. return ;
  184. }

codeforces 1100D-Dasha and Chess的更多相关文章

  1. CF1100D Dasha and Chess

    题目地址:CF1100D Dasha and Chess 这是我的第一道交互题 思路不难,主要讲讲这条语句: fflush(stdout); stdout是标准输出的意思.因为有时候,我们输出到std ...

  2. D. Dasha and Chess(交互题)

    题目链接:http://codeforces.com/contest/1100/problem/D 题目大意:给你一个999*999的图,然后有666个黑色旗子,一个白色棋子,每一次白色棋子只能在它附 ...

  3. codeforces 761D - Dasha and Very Difficult Problem

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  4. Codeforces 761C Dasha and Password(枚举+贪心)

    题目链接 Dasha and Password 题目保证一定有解. 考虑到最多只有两行的指针需要移动,那么直接预处理出该行移动到字母数字或特殊符号的最小花费. 然后O(N^3)枚举求最小值即可. 时间 ...

  5. Codeforces 761D Dasha and Very Difficult Problem(贪心)

    题目链接 Dasha and Very Difficult Problem 求出ci的取值范围,按ci排名从小到大贪心即可. 需要注意的是,当当前的ci不满足在这个取值范围内的时候,判为无解. #in ...

  6. Codeforces 761E Dasha and Puzzle(构造)

    题目链接 Dasha and Puzzle 对于无解的情况:若存在一个点入度大于4,那么直接判断无解. 从根结点出发(假设根结点的深度为0), 深度为0的节点到深度为1的节点的这些边长度为2^30, ...

  7. Codeforces 734D. Anton and Chess(模拟)

    Anton likes to play chess. Also, he likes to do programming. That is why he decided to write the pro ...

  8. Codeforces 1173B Nauuo and Chess

    题目链接:http://codeforces.com/problemset/problem/1173/B 思路参考:https://www.cnblogs.com/blowhail/p/1099123 ...

  9. codeforces 761B Dasha and friends

    https://vjudge.net/problem/CodeForces-761B 题意: 有一个圆形跑道,上面有若干个障碍,分别给出两个人距离障碍的距离,问这两个人是否是在同一个跑道上跑步(我是这 ...

  10. @codeforces - 793G@ Oleg and chess

    目录 @description - translation@ @solution@ @part - 1@ @part - 2@ @part - 3@ @part - 4@ @accepted code ...

随机推荐

  1. java mysql 数据库

    1. jdbc 驱动名还是数据库 String driver = "com.mysql.jdbc.Driver"; //URL指向要访问的数据库名mydataString url ...

  2. 带各位深入理解java1.8之supplier

    supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,看下面代码:public class TestSupplier { private int age; (www.0831jl ...

  3. mui请求数据接口问题

    今天我在本地模拟做一个数据请求,第一次用的mui自带的方法来请求数据,当时我的本地接口地址是http://localhost:8087/jeecg/sightseerController.do?che ...

  4. Development 编程规范

    { 命名规范类命名 1)所有的类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首字母大写.   类,接口名必须是有意义的,切忌使用中文拼音命名.另外所有类都要加标致前缀:“O ...

  5. thinkphp 防止XSS(跨站脚本攻击)

    XSS(跨站脚本攻击)可以用于窃取其他用户的Cookie信息,要避免此类问题,可以采用如下解决方案: 直接过滤所有的JavaScript脚本: 转义Html元字符,使用htmlentities.htm ...

  6. BZOJ 1415: [Noi2005]聪聪和可可(记忆化搜索+期望)

    传送门 解题思路 还是比较简答的一道题.首先\(bfs\)把每个点到其他点的最短路求出来,然后再记忆化搜索.记搜的时候猫的走法是确定的,搜一下老鼠走法就行了. 代码 #include<iostr ...

  7. NX二次开发-time.h获取计算机本地时间

    NX9+VS2012 #include <stdio.h> #include <time.h> char *wday[] = { "Sun", " ...

  8. linux基本命令vim

    拷贝当前行 yy,拷贝当前行向下的5行  5yy, 并粘贴(p). 删除当前航  dd,删除当前行向下的5行 5dd. 在文件中查找某个单词[命令行下/关键字,回车查找, 输入n 就是查找下一个] 查 ...

  9. Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限

    目录 1. 需要在spring-security.xml中配置验证过滤器,来取代spring-security.xml的默认过滤器 2. 配置securityMetadataSource,可以通过ur ...

  10. ionic-Javascript:ionic 上拉菜单(ActionSheet)

    ylbtech-ionic-Javascript:ionic 上拉菜单(ActionSheet) 1.返回顶部 1. ionic 上拉菜单(ActionSheet) 上拉菜单(ActionSheet) ...