模拟 CSU 1562 Fun House

题目传送门

  1 /*
  2     题意:光线从 ‘*‘ 发射,遇到 ‘/‘ 或 ‘\‘ 进行反射,最后射到墙上,将 ‘x‘ 变成 ‘&‘
  3     模拟:仔细读题,搞清楚要做什么,就是i,j的移动,直到撞到墙,模拟一下一次AC,不要被题目吓怕了:)
  4 */
  5 #include <cstdio>
  6 #include <iostream>
  7 #include <algorithm>
  8 #include <stack>
  9 #include <cmath>
 10 #include <cstring>
 11 #include <vector>
 12 using namespace std;
 13
 14 const int MAXN = 1e4 + 10;
 15 const int INF = 0x3f3f3f3f;
 16 char g[22][22];
 17
 18 int main(void)        //CSU 1562 Fun House
 19 {
 20     //freopen ("B.in", "r", stdin);
 21
 22     int n, m, cas = 0;
 23     while (scanf ("%d%d", &m, &n) == 2)
 24     {
 25         if (n == 0 && m == 0)    break;
 26
 27         for (int i=0; i<n; ++i)
 28         {
 29             scanf ("%s", &g[i]);
 30         }
 31
 32         printf ("HOUSE %d\n", ++cas);
 33
 34         int sx = -1, sy = -1;
 35         int num = 0;
 36         for (int i=0; i<n; ++i)
 37         {
 38             for (int j=0; j<m; ++j)
 39             {
 40                 if (g[i][j] == ‘*‘)
 41                 {
 42                     if (j == 0) num = 1;
 43                     else if (j == m-1)    num = 2;
 44                     else if (i == 0)    num = 3;
 45                     else if (i == n-1)    num = 4;
 46                     sx = i;    sy = j;
 47                     break;
 48                 }
 49             }
 50         }
 51
 52         while (1)
 53         {
 54             if (num == 1)
 55             {
 56                 ++sy;
 57                 if (g[sx][sy] == ‘/‘)    num = 4;
 58                 else if (g[sx][sy] == ‘\\‘)    num = 3;
 59                 else if (g[sx][sy] == ‘x‘)
 60                 {
 61                     g[sx][sy] = ‘&‘;    break;
 62                 }
 63             }
 64             else if (num == 2)
 65             {
 66                 --sy;
 67                 if (g[sx][sy] == ‘/‘)    num = 3;
 68                 else if (g[sx][sy] == ‘\\‘)    num = 4;
 69                 else if (g[sx][sy] == ‘x‘)
 70                 {
 71                     g[sx][sy] = ‘&‘;    break;
 72                 }
 73             }
 74             else if (num == 3)
 75             {
 76                 ++sx;
 77                 if (g[sx][sy] == ‘/‘)    num = 2;
 78                 else if (g[sx][sy] == ‘\\‘)    num = 1;
 79                 else if (g[sx][sy] == ‘x‘)
 80                 {
 81                     g[sx][sy] = ‘&‘;    break;
 82                 }
 83             }
 84             else if (num == 4)
 85             {
 86                 --sx;
 87                 if (g[sx][sy] == ‘/‘)    num = 1;
 88                 else if (g[sx][sy] == ‘\\‘)    num = 2;
 89                 else if (g[sx][sy] == ‘x‘)
 90                 {
 91                     g[sx][sy] = ‘&‘;    break;
 92                 }
 93             }
 94         }
 95
 96         for (int i=0; i<n; ++i)
 97         {
 98             for (int j=0; j<m; ++j)
 99             {
100                 printf ("%c", g[i][j]);
101             }
102             puts ("");
103         }
104     }
105
106     return 0;
107 }
108
109 /*
110 HOUSE 1
111 xxxxxxxxxxx
112 x../..\...x
113 x..../....x
114 *../......x
115 x.........x
116 xxxxxx&xxxx
117 HOUSE 2
118 xxxxx
119 *...&
120 x...x
121 x...x
122 xxxxx
123 HOUSE 3
124 xxxxx
125 x./\x
126 *./.x
127 x..\&
128 xxxxx
129 HOUSE 4
130 xxx*xx
131 x/...x
132 x....x
133 x/./.&
134 x\./.x
135 xxxxxx
136 HOUSE 5
137 xxxxxxxxxx
138 x.../\...x
139 x........x
140 x........x
141 &.../\..\x
142 *...\/../x
143 x........x
144 x........x
145 x...\/...x
146 xxxxxxxxxx
147 */
时间: 2024-10-28 03:14:54

模拟 CSU 1562 Fun House的相关文章

湖南多校对抗赛(2015.4.6)CSU 1561~1569 题解

A:点击打开链接 CSU 1561 (More)Multiplication 题意:把两个数的乘积每个位置的结果填充上去. 注意这个矩阵最大是1e8,所以不能开数组. 模拟题 #include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <cmath> #include <cstring> #include <queue

CSU 1112: 机器人的指令【模拟题】

1112: 机器人的指令 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1858  Solved: 682 [Submit][Status][Web Board] Description 数轴原点有一个机器人.该机器人将执行一系列指令,你的任务是预测所有指令执行完毕之后它的位置. ·LEFT:往左移动一个单位 ·RIGHT: 往右移动一个单位 ·SAME AS i: 和第i 条执行相同的动作.输入保证i 是一个正整数,且不超过之前执行指令数 In

csu - 1536: Bit String Reordering (模拟)

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1536 不知道为何怎么写都写不对. 这题可以模拟. 虽然题目保证一定可以从原串变成目标串,但是不一定可以变成两种目标串. 所以需要判断下.统计原串中0和1的个数,然后计算目标串中0可能的个数,1可能的个数. 计算交换次数就是从后面找一个跟当前不一样的数字交换到前面来即可. 1 #include<iostream> 2 #include<cstdio> 3 #include<cs

【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1<=j<=m,求i*j%2016=0的方案数. 题目思路: [模拟][数学] 按照%2016的余数分类.每增加一个2016就又多一种方案.统计是2016的几倍,根据余数分类.最后枚举i,j的余数即可求解. 1 // 2 //by coolxxx 3 //#include<bits/stdc++

【模拟】CSU 1807 最长上升子序列~ (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1807 题目大意: 给你一个长度为N(N<=105)的数列,数列中的0可以被其他数字替换,最终形成一个1~N的排列,求这个排列的最长上升子序列长度为N-1的方案数. 题目思路: [模拟] 这道题需要分类讨论. 首先可以肯定,一个长度为n的序列最长上升子序列长度为n-1(最长下降子序列长度为2),那么这个序列的样子是1~n从小到大排列后其中一个数字挪到其余数字中间(错位) 一个长度为L的

CSU 1267: Operation(模拟啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1267 Description 现在有26个变量,分别用a~z表示,它们的初值均为0.接下来一共有N个操作,这些操作一共分为如下6类: (1) mov a,b : 将变量b的值赋给a,相当于a = b,其中a.b泛指两个变量. (2) mov a,10 : 将10赋给a,相当于a = 10,其中a泛指某个变量,10泛指某个不大于20的正整数. (3) add a,b : 计算a + b的

CSU 1269: Morse Code Wristwatch(模拟啊 )

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1269 Description Tokyoflash推出了一款摩斯电码手表,样图如下. 要读懂这款手表,首先要了解一些摩斯电码的知识. 在了解了这些摩斯电码符号之后,就不难看懂表盘中显示的信息是"02 17 PM"了,也就是指下午2点17分.在12小时计时法中小时的取值范围为01到12之间的整数,AM代表上午,PM代表下午. 接下来我们就详细介绍一下这款摩斯电码手表是如何显示时

CSU 1330: 字符识别?(字符串模拟啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1330 Description 你的任务是写一个程序进行字符识别.别担心,你只需要识别1, 2, 3,如下: .*.  ***  *** .*.  ..*  ..* .*.  ***  *** .*.  *..  ..* .*.  ***  *** Input 输入仅包含一组数据,由6行组成.第一行为字符的个数n(1<=n<=10).以下5行每行包含4n个字符.每个字符恰好占5行3列,

CSU 1339: 最后一滴血(模拟啊 湖南省第九届大学生计算机程序设计竞赛)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1339 Description 在ACM/ICPC这样的程序设计竞赛中,最早解出一道题称为抢到FB(First Blood,第一滴血).现在ACM/ICPC世界总决赛甚至为每道题的FB设立了特别奖. 也许我们还可以设一个LB(Last Blood,最后一滴血)奖,奖给最后一个解出某题的队伍.注意:你不能先提交程序,得到Yes之后等比赛快结束时把它再交一遍,因为一旦一只队伍解出了某题,它对