【HDOJ】2414 Chessboard Dance

简单DFS。

  1 /* 2414 */
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <cstdlib>
  5
  6 const int n = 8;
  7 char map[10][10];
  8 int x, y, d;
  9 char dirs[5] = "^v<>";
 10 int dir[4][2] = {
 11     -1,0, 1,0, 0,-1, 0,1
 12 };
 13 int tdir[4][3] = {
 14     2,3,1, 3,2,0, 1,0,3, 0,1,2
 15 };
 16
 17 inline bool check(int x, int y) {
 18     return x<0 || x>=n || y<0 || y>=n;
 19 }
 20
 21 void dfs(int x, int y) {
 22     int i, j, k;
 23     int xx, yy;
 24
 25     xx = x + dir[d][0];
 26     yy = y + dir[d][1];
 27     if (check(xx, yy))
 28         return ;
 29     if (map[xx][yy] == ‘.‘) {
 30         map[xx][yy] = map[x][y];
 31         map[x][y] = ‘.‘;
 32     } else {
 33         dfs(xx, yy);
 34         map[xx][yy] = map[x][y];
 35         map[x][y] = ‘.‘;
 36     }
 37 }
 38
 39 int main() {
 40     int i, j, k;
 41     char cmd[10];
 42     int xx, yy;
 43
 44     #ifndef ONLINE_JUDGE
 45         freopen("data.in", "r", stdin);
 46         freopen("data.out", "w", stdout);
 47     #endif
 48
 49     while (scanf("%s", map[0]) != EOF) {
 50         if (map[0][0]==‘-‘ && map[0][1]==‘-‘ && map[0][2]==‘\0‘)
 51             break;
 52         for (i=1; i<8; ++i)
 53             scanf("%s", map[i]);
 54         for (i=0; i<8; ++i) {
 55             for (j=0; j<8; ++j) {
 56                 if (map[i][j] == ‘^‘) {
 57                     x = i;
 58                     y = j;
 59                     d = 0;
 60                 } else if (map[i][j] == ‘v‘) {
 61                     x = i;
 62                     y = j;
 63                     d = 1;
 64                 } else if (map[i][j] == ‘<‘) {
 65                     x = i;
 66                     y = j;
 67                     d = 2;
 68                 } else if (map[i][j] == ‘>‘) {
 69                     x = i;
 70                     y = j;
 71                     d = 3;
 72                 }
 73             }
 74         }
 75         while (scanf("%s", cmd)!=EOF && cmd[0]!=‘#‘) {
 76             if (cmd[0] == ‘m‘) {
 77                 // move
 78                 scanf("%d", &k);
 79                 while (k--) {
 80                     xx = x + dir[d][0];
 81                     yy = y + dir[d][1];
 82                     if (check(xx, yy))
 83                         break;
 84                     dfs(x, y);
 85                     x = xx;
 86                     y = yy;
 87                 }
 88             } else {
 89                 // turn
 90                 scanf("%s", cmd);
 91                 if (cmd[0] == ‘l‘) {
 92                     d = tdir[d][0];
 93                 } else if (cmd[0] == ‘r‘) {
 94                     d = tdir[d][1];
 95                 } else {
 96                     d = tdir[d][2];
 97                 }
 98             }
 99         }
100         map[x][y] = dirs[d];
101         for (i=0; i<8; ++i) {
102             map[i][8] = ‘\0‘;
103             puts(map[i]);
104         }
105         putchar(‘\n‘);
106     }
107
108     return 0;
109 }
时间: 2024-11-06 22:47:36

【HDOJ】2414 Chessboard Dance的相关文章

【HDOJ】4956 Poor Hanamichi

基本数学题一道,看错位数,当成大数减做了,而且还把方向看反了.所求为最接近l的值. 1 #include <cstdio> 2 3 int f(__int64 x) { 4 int i, sum; 5 6 i = sum = 0; 7 while (x) { 8 if (i & 1) 9 sum -= x%10; 10 else 11 sum += x%10; 12 ++i; 13 x/=10; 14 } 15 return sum; 16 } 17 18 int main() { 1

【HDOJ】1099 Lottery

题意超难懂,实则一道概率论的题目.求P(n).P(n) = n*(1+1/2+1/3+1/4+...+1/n).结果如果可以除尽则表示为整数,否则表示为假分数. 1 #include <cstdio> 2 #include <cstring> 3 4 #define MAXN 25 5 6 __int64 buf[MAXN]; 7 8 __int64 gcd(__int64 a, __int64 b) { 9 if (b == 0) return a; 10 else return

【HDOJ】2844 Coins

完全背包. 1 #include <stdio.h> 2 #include <string.h> 3 4 int a[105], c[105]; 5 int n, m; 6 int dp[100005]; 7 8 int mymax(int a, int b) { 9 return a>b ? a:b; 10 } 11 12 void CompletePack(int c) { 13 int i; 14 15 for (i=c; i<=m; ++i) 16 dp[i]

【HDOJ】3509 Buge&#39;s Fibonacci Number Problem

快速矩阵幂,系数矩阵由多个二项分布组成.第1列是(0,(a+b)^k)第2列是(0,(a+b)^(k-1),0)第3列是(0,(a+b)^(k-2),0,0)以此类推. 1 /* 3509 */ 2 #include <iostream> 3 #include <string> 4 #include <map> 5 #include <queue> 6 #include <set> 7 #include <stack> 8 #incl

【HDOJ】1818 It&#39;s not a Bug, It&#39;s a Feature!

状态压缩+优先级bfs. 1 /* 1818 */ 2 #include <iostream> 3 #include <queue> 4 #include <cstdio> 5 #include <cstring> 6 #include <cstdlib> 7 #include <algorithm> 8 using namespace std; 9 10 #define MAXM 105 11 12 typedef struct {

【HDOJ】2424 Gary&#39;s Calculator

大数乘法加法,直接java A了. 1 import java.util.Scanner; 2 import java.math.BigInteger; 3 4 public class Main { 5 public static void main(String[] args) { 6 Scanner cin = new Scanner(System.in); 7 int n; 8 int i, j, k, tmp; 9 int top; 10 boolean flag; 11 int t

【HDOJ】2425 Hiking Trip

优先级队列+BFS. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 7 #define MAXN 25 8 9 typedef struct node_st { 10 int x, y, t; 11 node_st() {} 12 node_st(int xx, int yy, int tt)

【HDOJ】1686 Oulipo

kmp算法. 1 #include <cstdio> 2 #include <cstring> 3 4 char src[10005], des[1000005]; 5 int next[10005], total; 6 7 void kmp(char des[], char src[]){ 8 int ld = strlen(des); 9 int ls = strlen(src); 10 int i, j; 11 12 total = i = j = 0; 13 while (

【HDOJ】2795 Billboard

线段树.注意h范围(小于等于n). 1 #include <stdio.h> 2 #include <string.h> 3 4 #define MAXN 200005 5 #define lson l, mid, rt<<1 6 #define rson mid+1, r, rt<<1|1 7 #define mymax(x, y) (x>y) ? x:y 8 9 int nums[MAXN<<2]; 10 int h, w; 11 12