2020年3月28日 ICPC训练联盟周赛 比赛补题报告
Posted zhengqc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020年3月28日 ICPC训练联盟周赛 比赛补题报告相关的知识,希望对你有一定的参考价值。
思路:
暴力搜索. 建立一个数组alpha,与26个字母相对应. 每个数组包含一个Vector,Vector中保存每个字母的位置.
例如alpha[0] 代表存储字母‘A‘ 的Vector;
代码:
1 #include <iostream> 2 #include <vector> 3 #include <string> 4 #include <cstdio> 5 using namespace std; 6 7 struct Node { 8 int x, y; 9 }; 10 string str[110]; 11 // 数组的数组 12 vector<Node> alpha[26]; 13 int main() { 14 int T; 15 cin >> T; 16 for (int t = 1; t <= T; ++t) { 17 for (int j = 0; j < 26; ++j) { 18 alpha[t].clear(); 19 } 20 int R, C; 21 cin >> R >> C; 22 Node temp; 23 for (int i = 0; i < R; ++i) { 24 cin >> str[i]; 25 for (int j = 0; j < C; ++j) { 26 temp.x = i, temp.y = j; 27 alpha[ str[i][j] - ‘A‘ ].push_back( temp ); 28 } 29 } 30 31 printf("Word search puzzle #%d: ", t); 32 int n; 33 cin >> n; 34 string query; 35 for (int i = 0; i < n; ++i) { 36 cin >> query; 37 int cnt = alpha[ query[0] - ‘A‘ ].size(); 38 39 for (int j = 0; j < cnt; ++j) { 40 Node head = alpha[ query[0] - ‘A‘ ][j]; 41 // 向上查找 42 bool flag = true; 43 for (int e = (head.x-1+2*R)%R, f = 1; f < query.length(); e = (e-1+2*R)%R, ++f) { 44 if (query[f] != str[e][head.y]) { 45 flag = false; 46 break; 47 } 48 } 49 if (flag) { 50 printf("U %d %d ", head.x+1, head.y+1); 51 cout << query << endl; 52 break; 53 } 54 55 // 向下查找 56 flag = true; 57 for (int e = (head.x+1)%R, f = 1; f < query.length(); e = (e+1)%R, ++f) { 58 if (query[f] != str[e][head.y]) { 59 flag = false; 60 break; 61 } 62 } 63 if (flag) { 64 printf("D %d %d ", head.x+1, head.y+1); 65 cout << query << endl; 66 break; 67 } 68 69 // 向左查找 70 flag = true; 71 for (int e = (head.y-1+2*C)%C, f = 1; f < query.length(); e = (e-1+2*C)%C, ++f) { 72 if (query[f] != str[head.x][e]) { 73 flag = false; 74 break; 75 } 76 } 77 if (flag) { 78 printf("L %d %d ", head.x+1, head.y+1); 79 cout << query << endl; 80 break; 81 } 82 83 // 向右查找 84 flag = true; 85 for (int e = (head.y+1)%C, f = 1; f < query.length(); e = (e+1)%C, ++f) { 86 if (query[f] != str[head.x][e]) { 87 flag = false; 88 break; 89 } 90 } 91 if (flag) { 92 printf("R %d %d ", head.x+1, head.y+1); 93 cout << query << endl; 94 break; 95 } 96 } 97 } 98 cout << endl; 99 } 100 101 return 0; 102 }
以上是关于2020年3月28日 ICPC训练联盟周赛 比赛补题报告的主要内容,如果未能解决你的问题,请参考以下文章
03.28,周六,12:00-17:00,ICPC训练联盟周赛,选用试题:UCF Local Programming Contest 2016正式赛。
[ICPC训练联盟周赛1] CTU Open Contest 2019
2020-3-14 acm训练联盟周赛Preliminaries for Benelux Algorithm Programming Contest 2019 解题报告+补题报告