题目描述
给一n×nn imes nn×n的字母方阵,内可能蕴含多个“yizhong
”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 888 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*
代替,以突出显示单词。例如:
输入:
8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g
输入输出格式
输入格式:
第一行输入一个数nnn。(7≤n≤1007 le n le 1007≤n≤100)。
第二行开始输入n×nn imes nn×n的字母矩阵。
输出格式:
突出显示单词的n×nn imes nn×n矩阵。
输入输出样例
输入样例#1: 复制
7 aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa
输出样例#1: 复制
******* ******* ******* ******* ******* ******* *******
输入样例#2: 复制
8 qyizhong gydthkjy nwidghji orbzsfgz hhgrhwth zzzzzozo iwdfrgng yyyygggg
输出样例#2: 复制
*yizhong gy****** n*i***** o**z**** h***h*** z****o** i*****n* y******g
题意:
给定一个n*n的字符矩阵,问能不能在行、列、对角线一共八个方向中找到字符串"yizhong"
把所有除"yizhong"之外的字符变成‘*’
思路:
数据量只有100,所以随便怎么暴力都行
1 //#include<bits/stdc++> 2 #include<stdio.h> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstring> 6 #include<stdlib.h> 7 #include<queue> 8 #include<map> 9 #include<stack> 10 #include<set> 11 12 #define LL long long 13 #define ull unsigned long long 14 #define inf 0x3f3f3f3f 15 16 using namespace std; 17 int n; 18 const int maxn = 105; 19 string ch[maxn]; 20 bool yes[maxn][maxn]; 21 22 int main() 23 { 24 scanf("%d", &n); 25 for(int i = 0; i < n; i++){ 26 cin>>ch[i]; 27 } 28 29 for(int i = 0; i < n; i++){ 30 for(int j = 0; j <= n - 7; j++){ 31 string tmp = ""; 32 for(int k = 0; k < 7; k++){ 33 tmp += ch[i][j + k]; 34 } 35 if(tmp == "yizhong"){ 36 for(int k = 0; k < 7; k++){ 37 yes[i][j + k] = true; 38 } 39 } 40 } 41 for(int j = n - 1; j >= 6; j--){ 42 string tmp = ""; 43 for(int k = 0; k < 7; k++){ 44 tmp += ch[i][j - k]; 45 } 46 if(tmp == "yizhong"){ 47 for(int k = 0; k < 7; k++){ 48 yes[i][j - k] = true; 49 } 50 } 51 } 52 } 53 54 for(int i = 0; i < n; i++){ 55 for(int j = 0; j <= n - 7; j++){ 56 string tmp = ""; 57 for(int k = 0; k < 7; k++){ 58 tmp += ch[j + k][i]; 59 } 60 if(tmp == "yizhong"){ 61 for(int k = 0; k < 7; k++){ 62 yes[j + k][i] = true; 63 } 64 } 65 } 66 for(int j = n - 1; j >= 6; j--){ 67 string tmp = ""; 68 for(int k = 0; k < 7; k++){ 69 tmp += ch[j - k][i]; 70 } 71 if(tmp == "yizhong"){ 72 for(int k = 0; k < 7; k++){ 73 yes[j - k][i] = true; 74 } 75 76 } 77 } 78 } 79 80 for(int i = 0; i <= n - 7; i++){ 81 for(int j = -n + 1 + i; j <= i; j++){ 82 string tmp = ""; 83 for(int k = 0; k < 7; k++){ 84 tmp += ch[i + k][i + k - j]; 85 } 86 if(tmp == "yizhong"){ 87 for(int k = 0; k < 7; k++){ 88 yes[i + k][i + k - j] = true; 89 } 90 } 91 } 92 } 93 for(int i = n - 1; i >= 6; i--){ 94 for(int j = -n + 1 + i; j <= i; j++){ 95 string tmp = ""; 96 for(int k = 0; k < 7; k++){ 97 tmp += ch[i - k][i - k - j]; 98 } 99 if(tmp == "yizhong"){ 100 for(int k = 0; k < 7; k++){ 101 yes[i - k][i - k - j] = true; 102 } 103 } 104 } 105 } 106 107 for(int i = 0; i <= n - 7; i++){ 108 for(int j = n - 1; j >= 6; j--){ 109 string tmp = ""; 110 for(int k = 0; k < 7; k++){ 111 tmp += ch[i + k][n - 2 - i - k]; 112 } 113 if(tmp == "yizhong"){ 114 for(int k = 0; k < 7; k++){ 115 yes[i + k][n - 2 - i - k] = true; 116 } 117 } 118 } 119 } 120 for(int i = n - 1; i >= 6; i--){ 121 for(int j = 0; j <= n - 7; j++){ 122 string tmp = ""; 123 for(int k = 0; k < 7; k++){ 124 tmp += ch[i - k][n - 2 - i + k]; 125 } 126 if(tmp == "yizhong"){ 127 for(int k = 0; k < 7; k++){ 128 yes[i - k][n - 2 - i - k] = true; 129 } 130 131 } 132 } 133 } 134 135 for(int i = 0; i < n; i++){ 136 for(int j = 0; j < n; j++){ 137 if(yes[i][j]){ 138 printf("%c", ch[i][j]); 139 } 140 else{ 141 printf("*"); 142 } 143 } 144 printf(" "); 145 } 146 return 0; 147 }