B - 瑶瑶带你玩激光坦克
B - 瑶瑶带你玩激光坦克
Problem Description
有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来达到一些目的,激光可以通过一些镜子反射。
机智的瑶瑶为了显示自己的智商高于常人,把这个游戏改造了一下,变成了用激光攻击敌人的游戏。
瑶瑶想知道射一次激光最多可以攻击到多少个敌人。
PS: 由于激光很强大,可以在击中敌人后穿过它,而瑶瑶自己的坦克由于有特殊装置,所以不会被激光击中,激光也会直接穿过它
Input
第1行两个正整数n, m (1 ≤ n, m ≤ 1000)表示地图大小,接下来n行每行m个字符描述地图。
. 表示此处为空地
* 表示此处为障碍(激光不可穿过,激光路径打到障碍时就结束)
T 代表瑶瑶的坦克位置
E 代表敌人
/ 代表按 左下-右上 放置的镜子
\ 代表按 左上-右下 放置的镜子
Output
一个整数代表瑶瑶向某个方向发射激光后最多可以攻击到的敌人数。
Sample Input
5 5
.*/E\
E*.*.
E*TEE
\.../
.*\EE
Sample Output
4
Hint
#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <string.h>
#define max(a,b)a>b?a:b
#pragma comment(linker,"/STACK:102400000,102400000")
using namespace std;
char Map[][];
int Map_S[][];
int Begin_X,Begin_Y;
int SUM;
int sum;
void BFS(int x,int y,int N)
{
if(Map[x][y]=='*')return;
if(Map_S[x][y]>=)return;
Map_S[x][y]++;
if(Map[x][y]=='/')
{
if(N==)BFS(x,y-,);
if(N==)BFS(x,y+,);
if(N==)BFS(x-,y,);
if(N==)BFS(x+,y,);
}
if(Map[x][y]=='\\')
{
if(N==)BFS(x,y+,);
if(N==)BFS(x,y-,);
if(N==)BFS(x+,y,);
if(N==)BFS(x-,y,);
}
if(Map[x][y]=='.'||Map[x][y]=='T'||Map[x][y]=='E')
{
if(Map[x][y]=='E'&&Map_S[x][y]==)sum++;
if(N==)BFS(x+,y,N);
if(N==)BFS(x-,y,N);
if(N==)BFS(x,y+,N);
if(N==)BFS(x,y-,N);
}
Map_S[x][y]--;
return ;
}
/*
void Put(int N,int M)
{
for(int i=0;i<=N+1;i++)
{
for(int j=0;j<=M+1;j++)
{
putchar(Map[i][j]);
}putchar(10);
}
}
*/
int main()
{
int N,M,i,j;
char str;
while(scanf("%d%d",&N,&M)!=EOF)
{
for(i=;i<=N;i++)scanf(" %s",Map[i]+);
for(i=;i<=N+;i++)
{
for(j=;j<=M+;j++)
{
Map_S[i][j]=;
if(i==||j==||i==N+||j==M+){Map[i][j]='*';continue;}
if(Map[i][j]=='T')
{
Map[i][j]='.';
Begin_X=i;
Begin_Y=j;
}
}
}
/* Put(N,M);*/
SUM=;
for(i=;i<;i++)
{
sum=;
BFS(Begin_X,Begin_Y,i);
SUM=max(SUM,sum);
}
printf("%d\n",SUM); }
return ;
}
/*
3 3
/E\
EET
\E/ 3 3
/.\
..T
\./ 3 4
//E\
/TE/
\/E/ 3 2
/\
ET
\/ */
#include <algorithm>
#include <iostream>
#include <stdio.h>
#include <string.h>
#define max(a,b)a>b?a:b
using namespace std;
char Map[][];
int Map_S[][];
int Work(int x,int y,int Go_To)/*x,y,为坐标,Go_To为方向*/
{
memset(Map_S,,sizeof(Map_S));
int sum=;
while()
{
if(Map[x][y]=='*')return sum; /*如果为墙的话,就退出*/
if(Map_S[x][y]>=)return sum; /*如果该点已经经过2次了的,死循环,退出*/
if(Map[x][y]=='E'&&Map_S[x][y]==)sum++; /*如果该点没有被标记过,且为E,sum++*/
Map_S[x][y]++; /*标记方向,需要用累加的,*/
if(Map[x][y]=='/')
{
switch(Go_To)
{
case :x=x;y=y-;Go_To=;break;
case :x=x;y=y+;Go_To=;break;
case :x=x-;y=y;Go_To=;break;
case :x=x+;y=y;Go_To=;break;
}
}
else if(Map[x][y]=='\\')
{
switch(Go_To)
{
case :x=x;y=y+;Go_To=;break;
case :x=x;y=y-;Go_To=;break;
case :x=x+;y=y;Go_To=;break;
case :x=x-;y=y;Go_To=;break;
}
}
else if(Map[x][y]=='.'||Map[x][y]=='E')
{
switch(Go_To)
{
case :x=x+;y=y;break;
case :x=x-;y=y;break;
case :x=x;y=y+;break;
case :x=x;y=y-;break;
}
}
}
return sum;
}
int main()
{
int N,M,i,j;
int B_X,B_Y;/*开始点*/
int SUM,sum;
while(scanf("%d%d",&N,&M)!=EOF)
{
for(i=;i<=N+;i++)
{
for(j=;j<=M+;j++)
{
if(i==||j==||i==N+||j==M+){Map[i][j]='*';continue;}
scanf(" %c",&Map[i][j]);
if(Map[i][j]=='T') /*获取起始点*/
{
Map[i][j]='.';
B_X=i;B_Y=j;
}
}
}
SUM=;
for(i=;i<;i++)
{
sum=Work(B_X,B_Y,i);
SUM=max(SUM,sum);
}
printf("%d\n",SUM);
}
return ;
}
/* 3 4
//\E
/ET/
\/// 3 3
/E\
EET
\E/ 3 3
/T\
...
\./ */
B - 瑶瑶带你玩激光坦克的更多相关文章
- acdream 瑶瑶带你玩激光坦克 (模拟)
瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Submi ...
- [ACdream]瑶瑶带你玩激光坦克
题目链接:http://acdream.info/contest?cid=1269#problem-B Problem Description 有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来 ...
- [ACdream 1099] 瑶瑶的第K大
瑶瑶的第K大 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Problem Des ...
- ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】
瑶瑶的第K大 Time Limit:2000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu Submit Status ...
- 带你玩转Visual Studio
带你玩转Visual Studio 带你新建一个工程 工程目录下各文件的含义 解决方案与工程 在这之前先了解一个概念:解决方案与工程. 解决方案(Solution):一个大型项目的整体的工作环境: 工 ...
- 来吧!带你玩转 Excel VBA
来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...
- 转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码
上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的 ...
- ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)
Problem Description 瑶瑶(tsyao)是某知名货运公司(顺丰)的老板,这个公司很大,货物运输量极大,因此公司修建了许多交通设施,掌控了一个国家的交通运输. 这个国家有n座城市,公司 ...
- ACdream 1104 瑶瑶想找回文串(SplayTree + Hash + 二分)
Problem Description 刚学完后缀数组求回文串的瑶瑶(tsyao)想到了另一个问题:如果能够对字符串做一些修改,怎么在每次询问时知道以某个字符为中心的最长回文串长度呢?因为瑶瑶整天只知 ...
随机推荐
- 网页数据抓取(B/S)
C# 抓取网页内容(转) 1.抓取一般内容 需要三个类:WebRequest.WebResponse.StreamReader 所需命名空间:System.Net.System.IO 核心代码: We ...
- 在网页边角添加GitHub链接图标
在网页边角添加GitHub链接图标 在页面添加HTML一下代码: <a href="https://github.com/you"> <img style=&qu ...
- 日期的本质是double
日期的本质是double,在多语种时用起来更方便.
- 5.Struts2的OGNL表达式
1.创建javaweb项目Struts2_Part4_OGNL并在WebRoot下的WEB-INF下的lib文件夹下添加如下jar文件 commons.jar commons.jar freemark ...
- Zeppelin使用报错
报错信息: INFO [2016-11-03 17:05:08,481] ({pool-2-thread-2} SchedulerFactory.java[jobFinished]:137) - Jo ...
- Layer 中自定义属性的动画
原文:http://objccn.io/issue-12-2/ Layer 中自定义属性的动画 默认情况下,CALayer 及其子类的绝大部分标准属性都可以执行动画,无论是添加一个 CAAni ...
- 给go添加各种package
go version 1.1.2 For example you need to install the webscoket pakeage try go get code.goo ...
- wpf 控件截屏
/// <summary> /// 保存截图 /// </summary> /// <param name="ui">控件名称</para ...
- Mysql基础知识整
web项目部署 Java项目使用的web服务器:Tomcat.weblogic.webshare.jetty Php.python使用的web服务器:nginx.apache 搭建环境过程: 部署.发 ...
- 如何获取本机IP
GetLocalHost 直接通过InetAddress.getLocalHost()来获取,其主要逻辑如下 InetAddress.getLocalHost(): String hostname = ...