acdream 瑶瑶带你玩激光坦克 (模拟)
瑶瑶带你玩激光坦克
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 思路:简单模拟即可。但是不能用递归,会爆。特别要注意的是数据读入的问题(有可能不是你想的那样的输入),还有重复统计(两次射过同个点)的问题。结束的条件是射出场外或'*'或同点同方向遍历过。
#include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define INF 0x7f7f7f7f
using namespace std;
const int N=+;
int n, m;
char g[N][N], gg[N][N];
bool vis[N][N][];
int tarx, tary; inline bool isingraph(int x,int y) //是否在场内
{
if(x>&&x<=n && y>&&y<=m) return ;
else return ;
} int shot(int x, int y, int flag) //1上,2右,3下,4左
{
int sum=;
while(isingraph(x,y)== && gg[x][y]!='*' && vis[x][y][flag]== )
{
vis[x][y][flag]=; //注意有4个方向,只有同个点,同个方向遍历过才可结束。可能无限循环。
if(gg[x][y]=='\\')
{
if(flag==) y--,flag=;
else if(flag==) x++,flag=;
else if(flag==) y++,flag=;
else if(flag==) x--,flag=;
}
else if(gg[x][y]=='/')
{
if(flag==) y++,flag=;
else if(flag==) x--,flag=;
else if(flag==) y--,flag=;
else if(flag==) x++,flag=;
}
else //E . 都在这
{
if(gg[x][y]=='E') sum++; //敌人
gg[x][y]='.'; //撞到E就改为'.' 防止多次统计
if(flag==) x--,flag=;
else if(flag==) y++,flag=;
else if(flag==) x++,flag=;
else if(flag==) y--,flag=;
}
}
return sum;
} int cal()
{
int ans=;
for(int i=; i<; i++)
{
memset(vis, , sizeof(vis));
memcpy(gg, g, sizeof(g)); //复制一个图出来,为了不破坏原图
ans=max(ans, shot(tarx, tary, i));
}
return ans;
} int main()
{
char c;
freopen("input.txt", "r", stdin);
while(~scanf("%d%d",&n,&m))
{
memset(g,,sizeof(g));
for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++)
{
c=getchar();
if(c == 'E' || c == '.' || c == '/' || c == '\\' || c == 'T' || c == '*')
g[i][j]=c;
else j--;
if(g[i][j]=='T') tarx=i,tary=j; //找人物坐标
}
}
printf("%d\n",cal());
}
return ;
}
AC代码
acdream 瑶瑶带你玩激光坦克 (模拟)的更多相关文章
- B - 瑶瑶带你玩激光坦克
B - 瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) S ...
- [ACdream]瑶瑶带你玩激光坦克
题目链接:http://acdream.info/contest?cid=1269#problem-B Problem Description 有一款名为激光坦克的游戏,游戏规则是用一个坦克发出激光来 ...
- ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】
瑶瑶的第K大 Time Limit:2000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu Submit Status ...
- [ACdream 1099] 瑶瑶的第K大
瑶瑶的第K大 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Problem Des ...
- ACdream 1103 瑶瑶正式成为CEO(树链剖分+费用流)
Problem Description 瑶瑶(tsyao)是某知名货运公司(顺丰)的老板,这个公司很大,货物运输量极大,因此公司修建了许多交通设施,掌控了一个国家的交通运输. 这个国家有n座城市,公司 ...
- ACdream 1104 瑶瑶想找回文串(SplayTree + Hash + 二分)
Problem Description 刚学完后缀数组求回文串的瑶瑶(tsyao)想到了另一个问题:如果能够对字符串做一些修改,怎么在每次询问时知道以某个字符为中心的最长回文串长度呢?因为瑶瑶整天只知 ...
- 带你玩转Visual Studio
带你玩转Visual Studio 带你新建一个工程 工程目录下各文件的含义 解决方案与工程 在这之前先了解一个概念:解决方案与工程. 解决方案(Solution):一个大型项目的整体的工作环境: 工 ...
- 来吧!带你玩转 Excel VBA
来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...
- 转: 带你玩转Visual Studio——带你理解多字节编码与Unicode码
上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C++运行时库及它的来龙去脉,这是C++开发中特别容易误入歧途的 ...
随机推荐
- 怎样下载安装Firebug和使用Firebug
Firebug是基于火狐(FireFox)浏览器的一个插件,它的作用是给Web页面开发者一个很好的测试前端页面代码的工具.所以深受网页开发者或网页布局爱好者的喜爱.像我们用DIV+CSS和html所写 ...
- 通过telnet命令进行网络邮件发送
1.建立smtp邮箱服务连接 open smtp.sina.com 2.连接上邮箱服务后进行握手操作 helo smtp.sina.com 3.输入帐号密码进行验证::此步后缓冲区会输出一些字符,你只 ...
- SQL Server数据库备份(异机)
简单的远程异机备份数据库功能,通过这个存储过程,讲远程其他机器上的数据库备份到本地.其主要原理为: 1.通过XP_CMDSHELL执行Windows命令,将本机的共享目录映射为远程机器的网络驱动器. ...
- (转)汇编bne的问题
网址:http://blog.csdn.net/lwj103862095/article/details/8073571 memsetup: @ 设置存储控制器以便使用SDRAM等外设 mov ...
- vs中使用过的扩展和好的nuget库
扩展 ReAttach ReAttach gives you an easy way to ReAttaching your prior debug targets. ReAttach stores ...
- 3.8 spring-qualifier 子元素的使用与解析
对于 qualifier 子元素,我们接触的更多的是注解形式,在使用Spring 自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean 时, S ...
- js注册登录审核
<script type="text/javascript"> $(function(){ $("#sendSms").click(function ...
- Ehcache 整合Spring 使用页面、对象缓存(转载)
Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的 ...
- Android名词解释
System Bars.Status Bar.Navigation Bar System Bars-->the Status bars and Navigation bars.
- Visual C++ 6.0静态、动态链接库
1.什么是静态连接库,什么是动态链接库 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了 ...