vijos P1263 单挑女飞贼

2024-01-30 21:58
文章标签 vijos 单挑 p1263 飞贼

本文主要是介绍vijos P1263 单挑女飞贼,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单挑女飞贼

实际上这是一道水题

本弱菜由于看错题WA了好多次orzzzz……

思路

按照最普通的思路 

从林月如的位置进行宽搜 

每次取出头结点判断飞镖是否可以攻击到女飞贼

没有用STL队列所以代码很丑

还有就是数据很弱 这样做居然可以秒掉……

代码

#include <cstdio>
#include <cstring>
#include <iostream>using namespace std;const int Maxn=301;struct node {int x,y,step;}point[20000];char c;
int dx[5]={0,1,-1,0,0};
int dy[5]={0,0,0,1,-1};
int n,m,x1,x2,y1,y2;
bool map[Maxn][Maxn],vis[Maxn][Maxn];int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>c;if(c=='O')map[i][j]=0;if(c=='X')map[i][j]=1;}while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF && x1 && x2 && y1 && y2 ){memset(point,0,sizeof(point));memset(vis,0,sizeof(vis));int head=1,tail=1;point[head].x=x2;point[head].y=y2;point[head].step=0;bool judge=1;while(head<=tail){int nx=point[head].x;int ny=point[head].y;if(nx==x1){int l=min(ny,y1),r=max(ny,y1),pd=1;for(int j=l+1;j<r;j++)if(map[nx][j]==1){pd=0;break;}if(pd==1){printf("%d\n",point[head].step);judge=0;}}if(judge==0)break;if(ny==y1){int l=min(nx,x1),r=max(nx,x1),pd=1;for(int j=l+1;j<r;j++)if(map[j][ny]==1){pd=0;break;}if(pd==1){printf("%d\n",point[head].step);judge=0;}}if(judge==0)break;if(nx-ny==x1-y1){int p=min(nx,x1),q=min(ny,y1),pd=1;int mx=max(nx,x1),my=max(ny,y1);while(p<mx&&q<my){if(map[p][q]==1){pd=0;break;}p++;q++;}if(pd==1){printf("%d\n",point[head].step);judge=0;}}if(judge==0)break;if(nx+ny==x1+y1){int p=min(nx,x1),q=max(ny,y1),pd=1;int mx=max(nx,x1),my=min(ny,y1);while(p<mx&&q>my){if(map[p][q]==1){pd=0;break;}p++;q--;}if(pd==1){printf("%d\n",point[head].step);judge=0;}}if(judge==0)break;for(int i=1;i<=4;i++){int xx=nx+dx[i];int yy=ny+dy[i];if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&!map[xx][yy]&&!vis[xx][yy]){tail++;point[tail].x=xx;point[tail].y=yy;point[tail].step=point[head].step+1;vis[xx][yy]=1;}}head++;}if(judge==1)printf("Impossible!\n");}
}
欢迎指出Bug


End。

这篇关于vijos P1263 单挑女飞贼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661674

相关文章

vijos P1680距离

https://vijos.org/p/1680#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;char s1[2222],s2[2222];int dp[2222][2222];int min(int a,int b,int c){b=b<c?b:c;re

vijos 1028 最长上升序列。

vijos 1028 换一个角度看问题。这道题其实就是一个上升序列。 如:a,aa,aaa,aaaa.一个另类的上升序列。 然后弱弱的试了是二分查找。很理想。不过却是个错误的思路。 朴素的上升序列求法 代码: #include <iostream>#include <string.h>#include <algorithm>using namespace std;char

vijos 1193 dp

每一行的状态由之前两行决定,dp[i][t][k]表示第i行状态为k,下一行状态为t时的种数,然后dp一遍即可。 代码: #include <iostream>#include <cstring>#include <cstdio>using namespace std;int a[10010];int dp[10010][2][2]; //1下一行还需要一个1,0下一行不需要1in

Vijos:P1001谁拿了最多奖学金

描述 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得; 2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得; 3) 成绩优秀奖,每人2000元,期末平均成绩高于

vijos 1100(树状dp)

点击打开链接 描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数 若某个子树

集成技术:.NET单挑J2EE

关于集成技术方面,我本不想比较,其实所有的开发者都明白一个道理,微软的开发平台天生就具有集成的优势,其实不用战斗,这场战役已经胜负明晰了,.NET身出名门,它在这场战斗胜利,我想很多人不会持太大的歧义,那么就让我们来看看.NET在哪些方面胜过J2EE的。   虽然我是个Java狂热者,在Java开发这三年多时间里,它给了我很多的快乐和收获,至少在生活,我可以用他来维持生计,但是今天我不得不把

Vijos P1848 记数问题【进制】

描述 试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。 格式 输入格式 输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开。 输出格式 输出共 1 行,包含一个整数,表示 x 出现的次数。 样例1 样例输入1 11 1

Vijos P1849 表达式求值【有限状态自动机】

描述 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 格式 输入格式 输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为 0 到 2 ^ 31 -1 之间的整数。输入数据保证这一行只有 0~ 9、+、*这 12 种字符。 输出格式 输出只有一行,包含一个整数,表示这个表达式的值。注意:当

Vijos P1756 数字反转【进制】

背景 noip2011 NO.1 描述 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。 格式 输入格式 输入共1 行,一个整数N。 输出格式 输出共1 行,一个整数,表示反转后的新数。 样例1 样例输入1 123 样例输出1 321 样例2

Vijos P1449 字符串还原【密码】

背景 小K是一位蔚蓝教主的崇拜者(Orz教主er),有一天,他收到了一封匿名信,信告诉了小K由于他表现出色,得到了一次当面Orz教主的机会,但是要当面Orz教主可不那么容易,不是每个人都有资格Orz教主的。所以要破解下面一段密文才可以得到相关的信息,信中有提供加密的规则,但是小K觉得这个问题看似复杂,所以想请你帮忙。 描述 一个长度为n的由小写字母组成的字符串s1 s2 ⋯ sn按如