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++开发中特别容易误入歧途的 ...
随机推荐
- 阶段性放弃 wxPython 前的总结
为了实现一个管理本地电子书的程序,搞了一段时间 GUI,使用 wxPython. 实在难以适应和习惯,也搞不出什么太好看的效果. 最不能忍受的是,多线程处理能力太弱.遂决定放弃 GUI. 放弃之前,整 ...
- 三类,23种设计模式,速记理解法!PHP
一,创建型设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳 ...
- Oracle分析函数 — rank, dense_rank, row_number用法
本文通过例子演示了Oracle分析函数 —— rank, dense_rank, row_number的用法. //首先建score表 create table score( course nva ...
- IOS 透视投影矩阵推导(转)
http://wenku.baidu.com/link?url=wDkyQR9fDI_tZas1BlMRUnNNoKwiQDygltm2wWxRr_sDwcDB51_QCDfR4Gb5wYrIUZ_t ...
- Lua基础之coroutine(协程)
概括:1.创建协程2.coroutine的函数3.coroutine的基本流程4.yield对coroutine流程的干预5.resume, function()以及yield之间的参数传递和返回值传 ...
- cocos2dx之C++调用Lua
原文地址:http://blog.csdn.net/dingkun520wy/article/details/49839701 1.引入头文件 #include "cocos2d.h&quo ...
- 使用MyBatis的resultMap高级查询时常用的方式总结
以下内容已经通过楼主测试, 从pd设计数据库到测试完成, 之前楼主也没有过Mybatis 使用resultMap觉得有点乱,最近抽出时间总结了一下也算对MyBatis的resultMap进行一次系统的 ...
- Gnome 插件介绍
插件:Applications Menuhttps://extensions.gnome.org/extension/6/applications-menu/ TopIconshttps://exte ...
- Oracle----dual
1. dual is a table that contains a single row. 2. The dual table has one VARCHAR2 column named dummy ...
- HDU4651+数学公式
见Goolgle http://zh.wikipedia.org/zh-cn/%E6%95%B4%E6%95%B8%E5%88%86%E6%8B%86 /* 数学公式 ans[i]:i可以有ans[i ...