• [CCPC2015]部分题解


    HDOJ5540 Secrete Master Plan

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5540

    问一张纸片旋转后能不能和另外一张完全一样,枚举所有情况即可。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 int x[4];
    23 int y[4];
    24 
    25 int main() {
    26     // freopen("in", "r", stdin);
    27     int T;
    28     int n;
    29     scanf("%d", &T);
    30     for(int _ = 1; _ <= T; _++) {
    31         for(int i = 0; i < 4; i++) scanf("%d", &x[i]);
    32         for(int i = 0; i < 4; i++) scanf("%d", &y[i]);
    33         int flag = 0;
    34         if(x[0] == y[0] && x[1] == y[1] && x[2] == y[2] && x[3] == y[3]) flag = true;
    35         else if(x[0] == y[1] && x[1 ]== y[3] && x[2] == y[0] && x[3] == y[2]) flag = true;
    36         else if(x[0] == y[2] && x[1 ]== y[0] && x[2] == y[3] && x[3] == y[1]) flag = true;
    37         else if(x[0] == y[3] && x[1 ]== y[2] && x[2] == y[1] && x[3] == y[0]) flag = true;
    38 
    39         printf("Case #%d: ", _);
    40         if(flag) printf("POSSIBLE
    ");
    41         else printf("IMPOSSIBLE
    ");
    42     }
    43 }
    5540

    HDOJ5546 Ancient Go

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5546

    问下一步是否可以吃掉o,搜索o的所有连通块的旁边是否只有一个.即可。额外开一个数组来记下当前连通块附近所有的.的位置。注意每找到一次连通块要初始化这个数组。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 const int dd[4][2] = {1,0,0,1,-1,0,0,-1};
    23 char G[11][11];
    24 bool vis[11][11];
    25 bool pos[11][11];
    26 int cnt, flag;
    27 
    28 void init() {
    29     memset(G, 0, sizeof(G));
    30     memset(vis, 0, sizeof(vis));
    31     memset(pos, 0, sizeof(pos));
    32     cnt = 0;
    33     flag = 0;
    34 }
    35 
    36 void dfs(int x, int y) {
    37     for(int i = 0; i < 4; i++) {
    38         int xx = x + dd[i][0];
    39         int yy = y + dd[i][1];
    40         if(G[xx][yy] == '.' && !pos[xx][yy]) {
    41             if(xx >= 0 && xx < 9 && yy >= 0 && yy < 9) {
    42                 cnt++;
    43                 pos[xx][yy] = 1;
    44             }
    45         }
    46     }
    47     for(int i = 0; i < 4; i++) {
    48         int xx = x + dd[i][0];
    49         int yy = y + dd[i][1];
    50         if(G[xx][yy] == 'o' && !vis[xx][yy]) {
    51             if(xx >= 0 && xx < 9 && yy >= 0 && yy < 9) {
    52                 vis[xx][yy] = 1;
    53                 dfs(xx, yy);
    54             }
    55         }
    56     }
    57 }
    58 
    59 int main() {
    60     // freopen("in", "r", stdin);
    61     int T;
    62     scanf("%d", &T);
    63     for(int _ = 1; _ <= T; _++) {
    64         init();
    65         for(int i = 0; i < 9; i++) {
    66             scanf("%s", G[i]) ;
    67         }
    68         // for(int i = 0; i < 9; i++) {
    69         //     printf("%s
    ", G[i]);
    70         // }
    71         for(int i = 0; i < 9; i++) {
    72             for(int j = 0; j < 9; j++) {
    73                 if(G[i][j] == 'o' && !vis[i][j]) {
    74                     memset(pos, 0, sizeof(pos));
    75                     vis[i][j] = 1;
    76                     cnt = 0;
    77                     dfs(i, j);
    78                     if(cnt == 1) {
    79                         flag = 1;
    80                         break;
    81                     }
    82                 }
    83             }
    84             if(flag) break;
    85         }
    86         printf("Case #%d: ", _);
    87         if(flag) printf("Can kill in one move!!!
    ");
    88         else printf("Can not kill in one move!!!
    ");
    89   }
    90 }
    5546

    HDOJ5547 Sudoku

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5547

    4*4的数独游戏,对角线上的数可以相同,但是每一个2*2的小方格(一共四个)中的数字必须不一样。回溯暴力可过。判重可以使用三个数组分别记录行列和块中各数的出现情况。(判断小格内重复的方法写搓了,好丑QAQ)

      1 #include <algorithm>
      2 #include <iostream>
      3 #include <iomanip>
      4 #include <cstring>
      5 #include <climits>
      6 #include <complex>
      7 #include <fstream>
      8 #include <cassert>
      9 #include <cstdio>
     10 #include <bitset>
     11 #include <vector>
     12 #include <deque>
     13 #include <queue>
     14 #include <stack>
     15 #include <ctime>
     16 #include <set>
     17 #include <map>
     18 #include <cmath>
     19 
     20 using namespace std;
     21 
     22 char G[10][10];
     23 bool row[10][10];
     24 bool col[10][10];
     25 bool square[10][10];
     26 
     27 bool flag;
     28 
     29 void init() {
     30     memset(G, 0, sizeof(G));
     31     memset(row, 0, sizeof(row));
     32     memset(col, 0, sizeof(col));
     33     memset(square, 0, sizeof(square));
     34     flag = 0;
     35 }
     36 
     37 int s(int r, int c) {
     38     if((r == 0 ||r == 1) && (c == 0 || c == 1)) return 1;
     39     if((r == 0 ||r == 1) && (c == 2 || c == 3)) return 2;
     40     if((r == 2 ||r == 3) && (c == 0 || c == 1)) return 3;
     41     if((r == 2 ||r == 3) && (c == 2 || c == 3)) return 4;
     42 }
     43 
     44 bool check(int r, int c, int n) {
     45     if(row[r][n])   return 0;
     46     if(col[c][n])   return 0;
     47     if(square[s(r,c)][n]) return 0;
     48     return 1;
     49 }
     50 
     51 void dfs(int cur) {
     52     if(cur == 16) {
     53         flag = 1;
     54         return;
     55     }
     56     int r = cur / 4;
     57     int c = cur % 4;
     58     if(G[r][c] == '*') {
     59         for(int i = 1; i <= 4; i++) {
     60             if(check(r, c, i)) {
     61                 G[r][c] = i + '0';
     62                 row[r][i] = 1;
     63                 col[c][i] = 1;
     64                 square[s(r,c)][i] = 1;
     65                 dfs(cur + 1);
     66                 if(flag) break;
     67                 G[r][c] = '*';
     68                 row[r][i] = 0;
     69                 col[c][i] = 0;
     70                 square[s(r,c)][i] = 0;
     71             }
     72         }
     73     }
     74     else dfs(cur + 1);
     75 }
     76 
     77 int main() {
     78     // freopen("in", "r", stdin);
     79     // freopen("out", "w", stdout);
     80     int T;
     81     scanf("%d", &T);
     82     for(int _ = 1; _ <= T; _++) {
     83         init();
     84         for(int i = 0; i < 4; i++) {
     85             scanf("%s", G[i]);
     86         }
     87         for(int i = 0; i < 4; i++) {
     88             for(int j = 0; j < 4; j++) {
     89                 if(G[i][j] != '*') {
     90                     row[i][G[i][j]-'0'] = 1;
     91                     col[j][G[i][j]-'0'] = 1;
     92                     square[s(i,j)][G[i][j]-'0'] = 1;
     93                 }
     94             }
     95         }
     96         printf("Case #%d:
    ", _);
     97         dfs(0);
     98         for(int i = 0; i < 4; i++) {
     99             for(int j = 0; j < 4; j++) {
    100                 printf("%c", G[i][j]);
    101             }
    102             printf("
    ");
    103         }
    104     }
    105 }
    5547

    HDOJ5551 Huatuo's Medicine

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5551

    本场最水,给你n个字符,让你用这n个字符排列出最小的奇数长度的回文串。2*n-1

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 int main() {
    23     int T;
    24     int n;
    25     scanf("%d", &T);
    26     for(int i = 1; i <= T; i++) {
    27         scanf("%d", &n);
    28         printf("Case #%d: %d
    ", i, 2 * n - 1);
    29     }
    30 }
    5551

    つづく

  • 相关阅读:
    Muduo 网络编程示例之五: 测量两台机器的网络延迟
    “过家家”版的移动离线计费系统实现
    一种自动反射消息类型的 Google Protobuf 网络传输方案
    Muduo 设计与实现之一:Buffer 类的设计
    为什么 muduo 的 shutdown() 没有直接关闭 TCP 连接?
    Muduo 网络编程示例之八:用 Timing wheel 踢掉空闲连接
    C++ 工程实践(5):避免使用虚函数作为库的接口
    分布式系统中的进程标识
    Ormlite在一般java环境中操作Sqlite
    android游戏开发框架libgdx的使用(十八)—简单的AVG游戏效果实现
  • 原文地址:https://www.cnblogs.com/kirai/p/4944827.html
Copyright © 2020-2023  润新知