NYOJ999 师傅又被妖怪抓走了

只记得当下的眼疼 , ok 各种数据也试了 , 就是 他娘的不对 , 我也是醉了 . 也是日了最野的狗

附上日了哮天犬的代码 , 这个题 先放放, 一段时间后再试试 , 明天开始状态压缩吧 .为期两天

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<math.h>
  4 #include<iostream>
  5 #include<algorithm>
  6 #include<queue>
  7 #include<vector>
  8 #include<set>
  9 #include<stack>
 10 #include<string>
 11 #include<sstream>
 12 #include<map>
 13 #include<cctype>
 14 using namespace std;
 15 int n,m,b[4][2]={0,-1,0,1,-1,0,1,0},minn,Q1,Q2,visited[105][105],vis[105][105];
 16 char a[105][105];
 17 struct monkey
 18 {
 19     int x,y,step;
 20 };
 21 queue<monkey>Q;
 22 void pretreatment(int x,int y,char b,char c)   //坐标 和 该名称  和  另一人名称
 23 {
 24     for(int i=x+1;i<m&&a[y][i]!=‘X‘&&a[y][i]!=c;i++)
 25         a[y][i]=(a[y][i]==‘d‘?‘O‘:b+32);
 26     for(int i=x-1;i>=0&&a[y][i]!=‘X‘&&a[y][i]!=c;i--)
 27         a[y][i]=(a[y][i]==‘d‘?‘O‘:b+32);
 28     for(int i=y+1;i<n&&a[i][x]!=‘X‘&&a[i][x]!=c;i++)
 29         a[i][x]=(a[i][x]==‘d‘?‘O‘:b+32);
 30     for(int i=y-1;i>=0&&a[i][x]!=‘X‘&&a[i][x]!=c;i--)
 31         a[i][x]=(a[i][x]==‘d‘?‘O‘:b+32);
 32 }
 33 queue<monkey>W;
 34 void BFSMORE(int x,int y,int step,char c)
 35 {
 36     monkey q={x,y,step};
 37     W.push(q);
 38     while(!W.empty())
 39     {
 40         monkey e=W.front();
 41         W.pop();
 42         for(int i=0;i<4;i++)
 43         {
 44             q.x=e.x+b[i][0],q.y=e.y+b[i][1];
 45             if(a[q.y][q.x]!=‘X‘&&a[q.y][q.x]!=‘D‘&&a[q.y][q.x]!=‘E‘&&q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&!vis[q.y][q.x])
 46             {
 47                 vis[q.y][q.x]=1;
 48                 q.step=e.step+1;
 49                 W.push(q);
 50                 if(a[q.y][q.x]==c||a[q.y][q.x]==‘O‘)
 51                 {
 52                     minn=minn>q.step?q.step:minn;
 53                     while(!W.empty())
 54                         W.pop();
 55                     break;
 56                 }
 57             }
 58         }
 59     }
 60 }
 61 void BFS(int x,int y)
 62 {
 63     monkey q={x,y,0};
 64     if(a[y][x]==‘O‘)
 65     {
 66         minn=0;
 67         return ;
 68     }
 69     if(a[y][x]==‘d‘)
 70     {
 71         memset(vis,0,sizeof(vis));
 72         BFSMORE(x,y,0,‘e‘);
 73     }
 74     if(a[y][x]==‘e‘)
 75     {
 76         memset(vis,0,sizeof(vis));
 77         BFSMORE(x,y,0,‘d‘);
 78     }
 79     Q.push(q);
 80     while(!Q.empty())
 81     {
 82         monkey e=Q.front();
 83         Q.pop();
 84         for(int i=0;i<4;i++)
 85         {
 86             q.x=e.x+b[i][0],q.y=e.y+b[i][1];
 87             if(a[q.y][q.x]!=‘X‘&&a[q.y][q.x]!=‘D‘&&a[q.y][q.x]!=‘E‘&&q.x>=0&&q.x<m&&q.y>=0&&q.y<n&&!visited[q.y][q.x])
 88             {
 89                 q.step=e.step+1;
 90                 Q.push(q);
 91                 visited[q.y][q.x]=1;
 92                 if(a[q.y][q.x]==‘d‘)
 93                 {
 94                     memset(vis,0,sizeof(vis));
 95                     BFSMORE(q.x,q.y,q.step,‘e‘);
 96                 }
 97                 if(a[q.y][q.x]==‘e‘)
 98                 {
 99                     Q2=1;
100                     memset(vis,0,sizeof(vis));
101                     BFSMORE(q.x,q.y,q.step,‘d‘);
102                 }
103             }
104         }
105     }
106 }
107 int main()
108 {
109     int sx,sy,dx,dy,ex,ey,t,count1=0;
110     while(scanf("%d%d%d",&n,&m,&t)!=EOF)
111     {
112         minn=t+1;
113         for(int i=0;i<n;i++)
114         {
115             for(int j=0;j<m;j++)
116             {
117                 scanf(" %c",&a[i][j]);
118                 if(a[i][j]==‘S‘)
119                 {
120                     sx=j;
121                     sy=i;
122                 }
123                 if(a[i][j]==‘D‘)
124                 {
125                     dx=j;
126                     dy=i;
127                 }
128                 if(a[i][j]==‘E‘)
129                 {
130                     ex=j;
131                     ey=i;
132                 }
133             }
134         }
135         pretreatment(dx,dy,‘D‘,‘E‘);
136         pretreatment(ex,ey,‘E‘,‘D‘);
137         memset(visited,0,sizeof(visited));
138         visited[sy][sx]=1;
139         BFS(sx,sy);
140         printf("Case %d:\n",++count1);
141         if(minn<=t)
142             printf("%d\n",minn);
143         else
144             printf("-1\n");
145     }
146     return 0;
147 }
时间: 2024-10-21 06:12:46

NYOJ999 师傅又被妖怪抓走了的相关文章

nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)

题目999 题目信息 执行结果 本题排行 讨论区 师傅又被妖怪抓走了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西.沿路饥餐渴饮,悟空便为师傅去化斋.等悟空回来,悟净慌慌张张的对悟空说:"不好了,不好了",还没等悟净说完,悟空说:"师傅又被妖怪抓走了",悟净:"NO!" ,悟空一脸茫然.悟净:"师傅和二师兄都被妖怪抓走了&q

nyoj 999——师傅又被妖怪抓走了——————【双广搜】

师傅又被妖怪抓走了 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西,沿路饥餐渴饮,悟空便为师傅去化斋,等悟空回来,悟净慌慌张张的对悟空说:“不好了,不好了”,还没等悟净说完,悟空说:“师傅又被妖怪抓走了”,悟净:“NO!” ,悟空一脸茫然,悟净:“师傅和二师兄都被妖怪抓走了”.悟空(晕!).为了防止悟空救人,妖怪先把唐憎和八戒分别藏起来,如果悟空在T分钟之后还没找到人,那必定是被妖怪吃

nyist 999 师傅又被妖怪抓走了 【双广搜 || BFS +状态压缩】

题目:nyist 999 师傅又被妖怪抓走了 分析:在一个图中只要看到D点和E点就行的最小步数,看到的定义是:也就是说两个人在同一行或者同一列,并且中间没有障碍物或者没有其他人就可以看到对方. 所以可以先预处理地图,把D点和E点所在的行列的' .'扩展为d和e,然后只要搜到d和e就可以,问题是只有d和e同时搜到才行,直接广搜肯定不行,我们可以在搜到d点之后然后在从当前点广搜e点,或者e点广搜d点,这样第一次搜到的点不一定是最优的,所以需要枚举所有情况才行,时间复杂度较高. 比较好的一种方法是BF

shu_1548 悟空的难题(大师兄,师傅被妖怪抓走啦!)

http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=17 分析:  直接暴力了... 代码: #include <stdio.h> #include <iostream> using namespace std; #define MAXN 2004 #define inf 0x3f3f3f3f int k[MAXN],f[MAXN]; int my_abs(int a) { return a<0? -

openjudge 大师兄,师傅被妖怪抓走啦

描述 孙悟空听到沙僧大喊一句:“大师兄,师傅被妖怪抓走啦!”于是孙悟空直追白骨精而去.孙悟空在一条长度为L的森林小路上飞奔,上面有L+1个整点,依次为0,1,2……L.白骨精会使用一种大范围的攻击法术,产生N个能量球,其中第i个能量球的能量值为f[i],落在小路的整点k[i]上.当孙悟空的位置离能量球i的距离为s时,会受到f[i]-s的伤害,如果f[i]-s计算出的伤害为负值,则判定为0.孙悟空虽然救师心切,但也不能葬身于白骨精的法术之中,因此他想知道应该躲在哪一个整点处,才能让自己受到的总伤害

fzu2172 字符串dp

F - 巡了南山我巡北山 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice FZU 2172 Description 大师兄在取经途中迷上了ACM-ICPC,稍不留神,师傅就被妖怪抓走了. 大师兄并不着急去救师傅,在虐这道简单题: 有两个字符串A和B,每一次可以选择以下操作中的一种,只对字符串A进行操作,用最少的操作使得字符串A与字符串B相等: 在

HTML学习笔记《一》

HTML 一.简介 1.HTML是超文本标记语言,标准通用标记语言下的一个应用. 2."超文本"就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 3.超文本标记语言的结构包括"头"部分(英语:Head).和"主体"部分(英语:Body),其中"头"部提供关于网页的信息,"主体"部分提供网页的具体内容. 二.语言特点(内容摘抄自--百度百科) 1.简易性:超级文本标记语言版本升级采用超集方式,从而

【文学文娱】《西游记--悼念杨洁》

本文地址 原文地址--微信 点击关注微信公众号 西游·电视剧 写作起因 说起<西游记 >,你首先想到的是什么?是嫉恶如仇,法力高强的齐天大圣 ,还是啰啰嗦嗦,坚持取经的唐僧 :是肥头大肚,贪色有趣的猪八戒 ,还是任劳任怨,为人忠厚的沙僧 呢. 西游·永远的经典 <西游记>是大家心目中的经典,86年版的央视<西游记>已经重播了3000多次,是寒暑假重播最多的电视剧,在广大国人心中是无法超越的经典.然而,昨天听说<西游记>电视剧的导演杨洁 女士去世的消息.美猴王

C语言攻略指南(三)流程控制篇

流程控制语句,或者说控制流语句,是用于控制程序计算操作执行的次序,使我们能实现判断,选择,循环等操作.本篇将逐一描述 C语言中的流程控制语句. 选择结构 if 语句 if(表达式) 语句1; else 语句2; 如果表达式的值为真(非0),执行语句1,如果为假(0),则执行语句2.(在 C语言中,非零即真) 这里的语句并不单指一条以 ; 为结束符的语句,也可能是多条语句,而是多条语句时,即代码块,最好用 { } 括起来,这样不容易出错,也方便读. else 部分是可选的,如果不写,表达式的值为真