洛谷P1101 单词方阵【暴力】【字符串】

题目描述

给一n×nn \times 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 1007n100)。

第二行开始输入n×nn \times nn×n的字母矩阵。

输出格式:

突出显示单词的n×nn \times 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("\n");
145     }
146     return 0;    
147 } 

猜你喜欢

转载自www.cnblogs.com/wyboooo/p/10347167.html