hdu4740【杭州网赛、模拟、有点搜索?】
当时看了这题就感觉so easy。。。 本来不想写的,后来感觉是不是可以练一下搜索水平。。
比赛时有人过了就没写。 比赛完了写一下。
实现还不是那么顺利, 囧
本来自己以为这题能练下搜索,其实DFS、BFS都没用到,也许模拟中有点搜索吧。
还是类似方格的东西把外围也设置成未标记要好的多,做题多了也许就有这种感觉了吧。
还有自己忽略了驴 老虎前面是已经走过的路也可以转弯。 BS!!
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <vector>
- #include <algorithm>
- #define clr(x) memset(x, 0, sizeof(x))
- using namespace std;
- const int maxn = 1200;
- int dv[maxn][maxn], tv[maxn][maxn];
- int n, temp;
- //碰到已经走过的点也会转向 不仅是撞墙时。
- int main()
- {
- while(scanf("%d", &n) != EOF)
- {
- if(!n) break;
- memset(dv, -1, sizeof(dv));
- memset(tv, -1, sizeof(tv));
- int a2, b2, c2, a1, b1, c1, ans;
- scanf("%d%d%d",&a1, &b1, &c1);
- a1++; b1++;
- scanf("%d%d%d",&a2, &b2, &c2);
- a2++; b2++;
- ans = 0;
- for(int i = 1; i <= n; i++) //防止界外。 外围都要包一层
- for(int j = 1; j <= n; j++)
- {
- dv[i][j] = 0;
- tv[i][j] = 0;
- }
- dv[a1][b1] = 1; tv[a2][b2] = 1;
- while(true)
- {
- int ok1 = 0, ok2 = 0, temp;
- if(a1 == a2 && b1 == b2) break;
- if(c1 == 0) // east
- {
- temp = b1 + 1;
- if(!dv[a1][temp])
- {
- ++b1;
- ok1 = 1;
- dv[a1][temp] = 1;
- }
- else if(!dv[a1+1][b1])
- {
- ++a1;
- ok1 = 1;
- c1 = 1;
- dv[a1][b1] = 1;
- }
- }
- else if(c1 == 1) //south
- {
- temp = a1 + 1;
- if(!dv[temp][b1])
- {
- ++a1;
- ok1 = 1;
- dv[temp][b1] = 1;
- }
- else if(!dv[a1][b1-1])
- {
- --b1;
- ok1 = 1;
- c1 = 2;
- dv[a1][b1] = 1;
- }
- }
- else if(c1 == 2) //west
- {
- temp = b1 - 1;
- if(!dv[a1][temp])
- {
- --b1;
- ok1 = 1;
- dv[a1][temp] = 1;
- }
- else if(!dv[a1-1][b1])
- {
- --a1;
- ok1 = 1;
- c1 = 3;
- dv[a1][b1] = 1;
- }
- }
- else if(c1 == 3) //north
- {
- temp = a1 - 1;
- if(!dv[temp][b1])
- {
- --a1;
- ok1 = 1;
- dv[temp][b1] = 1;
- }
- else if(!dv[a1][b1+1])
- {
- ++b1;
- ok1 = 1;
- c1 = 0;
- dv[a1][b1] = 1;
- }
- }
- if(c2 == 0) // east
- {
- temp = b2 + 1;
- if(!tv[a2][temp])
- {
- ++b2;
- ok2 = 1;
- tv[a2][temp] = 1;
- }
- else if(!tv[a2-1][b2])
- {
- --a2;
- ok2 = 1;
- c2 = 3;
- tv[a2][b2] = 1;
- }
- }
- else if(c2 == 1) //south
- {
- temp = a2 + 1;
- if(!tv[temp][b2])
- {
- ++a2;
- ok2 = 1;
- tv[temp][b2] = 1;
- }
- else if(!tv[a2][b2+1])
- {
- ++b2;
- ok2 = 1;
- c2 = 0;
- tv[a2][b2] = 1;
- }
- }
- else if(c2 == 2) //west
- {
- temp = b2 - 1;
- if(!tv[a2][temp])
- {
- --b2;
- ok2 = 1;
- tv[a2][temp] = 1;
- }
- else if(!tv[a2+1][b2])
- {
- ++a2;
- ok2 = 1;
- c2 = 1;
- tv[a2][b2] = 1;
- }
- }
- else if(c2 == 3) //north
- {
- temp = a2 - 1;
- if(!tv[temp][b2])
- {
- --a2;
- ok2 = 1;
- tv[temp][b2] = 1;
- }
- else if(!tv[a2][b2-1])
- {
- --b2;
- ok2 = 1;
- c2 = 2;
- tv[a2][b2] = 1;
- }
- }
- if(ok1 == 0 && ok2 == 0)
- {
- ans = -1; break;
- }
- }
- if(ans == -1) printf("-1\n");
- else printf("%d %d\n", a1-1, b1-1);
- }
- return 0;
- }
自己要是想缩短代码长度其实可以设个函数。
再看看THU的代码。。 有 1 -1 0 0 这种东西。。
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<string>
- using namespace std;
- const int MAX_N = 1000 + 10;
- int n;
- //E,S,W,N
- int dx[4] = { 0, 1, 0, -1 }, dy[4] = { 1, 0, -1, 0 };
- struct Walker {
- int x, y, d, turn;
- bool active;
- bool vis[MAX_N][MAX_N]; //where had he visited
- void read(int turn) {
- this->turn = turn;
- cin >> x >> y >> d;
- active = true;
- memset(vis, 0, sizeof vis);
- }
- bool check(int r, int c) {
- return r >= 0 && r < n && c >= 0 && c < n && !vis[r][c];
- }
- void walk() { //can walk?
- //go stright
- if (check(x + dx[d], y + dy[d])) {
- x += dx[d], y += dy[d];
- goto end;
- }
- d = (d + turn) % 4;
- if (check(x + dx[d], y + dy[d])) {
- x += dx[d], y += dy[d];
- goto end;
- }
- active = false; //dead >_<
- return;
- end: {
- }
- vis[x][y] = true;
- }
- };
- Walker A, B;
- int main() {
- for (;;) {
- cin >> n;
- if (n == 0)
- break;
- A.read(1);
- B.read(3);
- A.vis[A.x][A.y] = true;
- B.vis[B.x][B.y] = true;
- for (;;) {
- if (!A.active && !B.active)
- break; //end!
- if (A.x == B.x && A.y == B.y) {
- cout << A.x << " " << A.y << endl;
- goto end;
- }
- if (A.active) {
- A.walk();
- }
- if (B.active) {
- B.walk();
- }
- }
- cout << -1 << endl;
- end: {
- }
- }
- }
hdu4740【杭州网赛、模拟、有点搜索?】的更多相关文章
- 杭州网赛 two rabbits (hdu 4745)
算法很简单,问题是,怎么证明,答案是回文序列. 设a,b走的序列按顺时针是: a1 , a2 , a3 , ... , ak b1 , b2 , b3 , ... , bk 考虑端点的2种情况: 1. ...
- HDU4738【杭州网赛、判桥】
刚拿到这道题时挺有思路,无奈平日里只敲过找割顶的代码,判桥的代码当时自己也没仔细敲. 当时一把泪啊,忽然感觉自己的图论才只是刚搞了个起步啊.. 题目有神坑. 就是先判是否连通,不连通直接输出0; ...
- 2013杭州网赛 1001 hdu 4738 Caocao's Bridges(双连通分量割边/桥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥 ...
- hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@' 表示的是起点,'#' 表示的是障碍物不能通过,'.' 表示的是路能通过的: ...
- ZOJ Bizarre Routine 2013杭州网赛B题
题目意思: 给定n, expect, a, b 要求你构造一组array[],存放一个1..n的排列,使的下面的程序能输出YES 题目所示代码: bool less_than(x, y) { T++; ...
- HDU 4746 HDOJ Mophues 2013杭州网赛I题
比赛的时候就预感到这题能出,但是会耗时比较多.结果最后是出了,但是有更简单的题没出. 是不是错误的决策呢?谁知道呢 题目意思: 定义f(x) = x分解质因数出来的因子个数 如 x = p0 * p0 ...
- python--selenium简单模拟百度搜索点击器
python--selenium简单模拟百度搜索点击器 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: selenium 模拟 简单 点击 搜索 百度 发表文章摘要:用途:简单模拟 ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Splinter学习--初探1,模拟百度搜索
Splinter是以Selenium, PhantomJS 和 zope.testbrowser为基础构建的web自动化测试工具,基本原理同selenium 支持的浏览器包括:Chrome, Fire ...
随机推荐
- codevs1040 统计单词个数
题目描述 Description 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<= ...
- Node.js log2: ERR when execute command >npm install
1.Node.js创建项目 项目microblog创建成功,提示:cd microblog& npm install 项目创建完成时的目录如下图所示: 2.Node.js错误 如题所言: E ...
- CentOS7 lamp安装 centoOS6 lamp
快速lamp安装 How To Install Linux, Apache, MySQL, PHP (LAMP) stack On CentOS 7 Introduction A "LAMP ...
- 自己改写了一个图片局部放大的jquery插件页面里面的html代码少了,同一个页面可以调用多个
自己改写了一个图片局部放大的jquery插件页面里面的html代码少了,同一个页面可以调用多个,兼容ie8以上浏览器,别忘了引用jquery,我用的jquery/1.11.0/其他版本没有测试,另外需 ...
- Seek the Name, Seek the Fame(Kmp)
Seek the Name, Seek the Fame Time Limit : 4000/2000ms (Java/Other) Memory Limit : 131072/65536K (J ...
- win7下安装Ubuntukylin-14.04双系统
工具准备: 下载ISO系统镜像,UltraISO,EasyBCD,分区助手,8G 优盘 U盘启动制作流程: 1,打开分区助手,从硬盘中分出空闲空间(60G)作为Ubuntu工作空间,文件系统设为Ext ...
- Erp第一章:初感
Erp第一章:初感1.核心标志实现:内部集成.外部集成.内部集成包括实现产品研发.核心业务.数据采集:外部集成就是企业与供需链上的所有合作伙伴的共享信息集成.2.Erp难点在于打破传统企业四面墙,把流 ...
- css3文本效果
CSS3 包含多个新的文本特性. 在本章中,您将学到如下文本属性: 1. text-shadow 2. word-wrap 浏览器支持 Internet Explorer 10.Firefox.Chr ...
- IBATIS处理typeHandler类容易范的SQLException总结
1. java.sql.SQLException: 无效的列类型 原因: A. ibatis的IN,OUT参数.或者typeHandler类中传入的参数值数据类型与Oracle自定义对象中的属性值的数 ...
- Oracle数据库按属性成绩查询
create or replace function bb return nvarchar2as-----------自定义游标类型type class_student is record( snam ...