codeforces 1100D-Dasha and Chess
传送门:QAQQAQ
题意:This is an interactive task.
999*999国际象棋棋盘中有一个王和666个车,玩家走王,电脑走车,玩家先走,玩家的目的是让对方的车将到自己的王,电脑的车可以“飞”(即移动到棋盘上任意一点),但吃子规则不变,玩家必须要在2000步之内获胜
思路:哇塞这是国际象棋!好激动好激动!(然而没做出来)
我们考虑一般情况:根据王的位置一横一竖把棋盘分成4个部分,加入王往一个方向走(这里假设往左上走),则除了背对他的方向其它所有车都要闪开(即左上,右上,左下)
假如我们从左上角开始赶车:有666个车要被赶走,王走到右下角(即把车赶光)要998步,太多了;
那么如果王在最中间呢?——最少的一个方向最多也就166个,也就是王在中间背对车个数最少的方向走最少也可以赶走500个车,而王走到最底下只要499步——有2个车来不及闪开了
所以我们先把王移到正中间,再背对车个数最少的方向逼近就行了
活生生打成了码农题(200多行,有很多函数是多余的),一直说越界(其实电脑骗人,只要wronganswer就说越界),加了很多特判,结果发现把王的位置也读入的时候mp赋值为1了
代码:
- #include<bits/stdc++.h>
- using namespace std;
- const int inf=;
- int dx[]={-,-,,};
- int dy[]={-,,-,};
- struct node{
- int x,y;
- }a[];
- int mp[][];
- void init()
- {
- memset(mp,,sizeof(mp));
- for(int i=;i<=;i++)
- {
- scanf("%d%d",&a[i].x,&a[i].y);
- if (i) mp[a[i].x][a[i].y]++;//之前没判i!=0
- }
- }
- void print()
- {
- printf("%d %d\n",a[].x,a[].y);
- fflush(stdout);
- }
- void up()
- {
- a[].x--;
- print();
- }
- void down()
- {
- a[].x++;
- print();
- }
- void left()
- {
- a[].y--;
- print();
- }
- void right()
- {
- a[].y++;
- print();
- }
- void leftup()
- {
- if(mp[a[].x-][a[].y-])
- {
- up();
- return;
- }
- a[].x--; a[].y--;
- print();
- }
- void leftdown()
- {
- if(mp[a[].x+][a[].y-])
- {
- down();
- return;
- }
- a[].x++; a[].y--;
- print();
- }
- void rightdown()
- {
- if(mp[a[].x+][a[].y+])
- {
- down();
- return;
- }
- a[].x++; a[].y++;
- print();
- }
- void rightup()
- {
- if(mp[a[].x-][a[].y+])
- {
- up();
- return;
- }
- a[].x--; a[].y++;
- print();
- }
- void read()
- {
- int id,xx,yy;
- scanf("%d%d%d",&id,&xx,&yy);
- if(id==-)
- {
- exit();
- }
- mp[a[id].x][a[id].y]--;
- a[id].x=xx; a[id].y=yy;
- mp[a[id].x][a[id].y]++;
- }
- void ready()
- {
- while(a[].x<)
- {
- down();
- read();
- }
- while(a[].x>)
- {
- up();
- read();
- }
- while(a[].y>)
- {
- left();
- read();
- }
- while(a[].y<)
- {
- right();
- read();
- }
- }
- int dir,minn=inf,tmp;
- void judge_direction()
- {
- int cnt[]={,,,};//0:leftup 1:rightup 2:leftdown 3:rightdown
- for(int i=;i<=;i++)
- {
- for(int j=;j<=;j++)
- {
- if(i<)
- {
- if(j<) cnt[]+=mp[i][j];
- if(j>) cnt[]+=mp[i][j];
- }
- if(i>)
- {
- if(j<) cnt[]+=mp[i][j];
- if(j>) cnt[]+=mp[i][j];
- }
- }
- }
- for(int i=;i<;i++)
- {
- if(minn>cnt[i]) minn=cnt[i],tmp=i;
- }
- dir=-tmp;
- }
- void move(int dir)
- {
- if(dir==) leftup();
- else if(dir==) rightup();
- else if(dir==) leftdown();
- else rightdown();
- }
- void solve()
- {
- while()
- {
- move(dir);
- read();
- }
- }
- int main()
- {
- init();
- ready();
- judge_direction();
- solve();
- return ;
- }
codeforces 1100D-Dasha and Chess的更多相关文章
- CF1100D Dasha and Chess
题目地址:CF1100D Dasha and Chess 这是我的第一道交互题 思路不难,主要讲讲这条语句: fflush(stdout); stdout是标准输出的意思.因为有时候,我们输出到std ...
- D. Dasha and Chess(交互题)
题目链接:http://codeforces.com/contest/1100/problem/D 题目大意:给你一个999*999的图,然后有666个黑色旗子,一个白色棋子,每一次白色棋子只能在它附 ...
- codeforces 761D - Dasha and Very Difficult Problem
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- Codeforces 761C Dasha and Password(枚举+贪心)
题目链接 Dasha and Password 题目保证一定有解. 考虑到最多只有两行的指针需要移动,那么直接预处理出该行移动到字母数字或特殊符号的最小花费. 然后O(N^3)枚举求最小值即可. 时间 ...
- Codeforces 761D Dasha and Very Difficult Problem(贪心)
题目链接 Dasha and Very Difficult Problem 求出ci的取值范围,按ci排名从小到大贪心即可. 需要注意的是,当当前的ci不满足在这个取值范围内的时候,判为无解. #in ...
- Codeforces 761E Dasha and Puzzle(构造)
题目链接 Dasha and Puzzle 对于无解的情况:若存在一个点入度大于4,那么直接判断无解. 从根结点出发(假设根结点的深度为0), 深度为0的节点到深度为1的节点的这些边长度为2^30, ...
- 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 ...
- Codeforces 1173B Nauuo and Chess
题目链接:http://codeforces.com/problemset/problem/1173/B 思路参考:https://www.cnblogs.com/blowhail/p/1099123 ...
- codeforces 761B Dasha and friends
https://vjudge.net/problem/CodeForces-761B 题意: 有一个圆形跑道,上面有若干个障碍,分别给出两个人距离障碍的距离,问这两个人是否是在同一个跑道上跑步(我是这 ...
- @codeforces - 793G@ Oleg and chess
目录 @description - translation@ @solution@ @part - 1@ @part - 2@ @part - 3@ @part - 4@ @accepted code ...
随机推荐
- java mysql 数据库
1. jdbc 驱动名还是数据库 String driver = "com.mysql.jdbc.Driver"; //URL指向要访问的数据库名mydataString url ...
- 带各位深入理解java1.8之supplier
supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,看下面代码:public class TestSupplier { private int age; (www.0831jl ...
- mui请求数据接口问题
今天我在本地模拟做一个数据请求,第一次用的mui自带的方法来请求数据,当时我的本地接口地址是http://localhost:8087/jeecg/sightseerController.do?che ...
- Development 编程规范
{ 命名规范类命名 1)所有的类名,接口名(Protocol)均以大写字母开头,多单词组合时,后面的单词首字母大写. 类,接口名必须是有意义的,切忌使用中文拼音命名.另外所有类都要加标致前缀:“O ...
- thinkphp 防止XSS(跨站脚本攻击)
XSS(跨站脚本攻击)可以用于窃取其他用户的Cookie信息,要避免此类问题,可以采用如下解决方案: 直接过滤所有的JavaScript脚本: 转义Html元字符,使用htmlentities.htm ...
- BZOJ 1415: [Noi2005]聪聪和可可(记忆化搜索+期望)
传送门 解题思路 还是比较简答的一道题.首先\(bfs\)把每个点到其他点的最短路求出来,然后再记忆化搜索.记搜的时候猫的走法是确定的,搜一下老鼠走法就行了. 代码 #include<iostr ...
- NX二次开发-time.h获取计算机本地时间
NX9+VS2012 #include <stdio.h> #include <time.h> char *wday[] = { "Sun", " ...
- linux基本命令vim
拷贝当前行 yy,拷贝当前行向下的5行 5yy, 并粘贴(p). 删除当前航 dd,删除当前行向下的5行 5dd. 在文件中查找某个单词[命令行下/关键字,回车查找, 输入n 就是查找下一个] 查 ...
- Spring-Security (学习记录四)--配置权限过滤器,采用数据库方式获取权限
目录 1. 需要在spring-security.xml中配置验证过滤器,来取代spring-security.xml的默认过滤器 2. 配置securityMetadataSource,可以通过ur ...
- ionic-Javascript:ionic 上拉菜单(ActionSheet)
ylbtech-ionic-Javascript:ionic 上拉菜单(ActionSheet) 1.返回顶部 1. ionic 上拉菜单(ActionSheet) 上拉菜单(ActionSheet) ...