题目:https://codeforces.com/contest/1579/problem/C
这是一道很水的暴力题,只需要找到每一个可能的点然后按下去尽量多按一些格子即可,
题目:
ac代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 20;
char a[N][N];
bool st[N][N];
int n , m ,k;
bool in(int x,int y)
{
if(x < 1 || x > n || y < 1 || y > m)return false;
return true;
}
bool check(int x, int y)
{
int x1, x2, y1 , y2;
x1 = x - 1 , y1 = y - 1;
x2 = x - 1 , y2 = y + 1;
if(in(x1,y1) && a[x1][y1] == '*');
else return false;
if(in(x2,y2) && a[x2][y2] == '*');
else return false;
return true;
}
int push(int x, int y)
{
int x1, x2, y1 , y2;
x1 = x2 = x;
y1 = y2 = y;
int len = 0 ;
while(1)
{
if(!in(x1,y1) || a[x1][y1] != '*')break;
if(!in(x2,y2) || a[x2][y2] != '*')break;
len ++ ;
x1 -- , y1 -- ;
x2 -- , y2 ++ ;
}
return len;
}
void o(int x, int y)
{
int x1, x2, y1 , y2;
x1 = x2 = x;
y1 = y2 = y;
int len = 0 ;
while(1)
{
if(!in(x1,y1) || a[x1][y1] != '*')break;
if(!in(x2,y2) || a[x2][y2] != '*')break;
st[x1][y1] = st[x2][y2] = 1;
len ++ ;
x1 -- , y1 -- ;
x2 -- , y2 ++ ;
}
}
int main()
{
int t;
cin >> t;
while(t--)
{
cin >> n >> m >> k ;
for(int i = 1; i <= n ; i ++)
cin >> a[i] + 1;
memset(st,0,sizeof st);
for(int i = 1; i <= n ; i ++)
{
for(int j = 1; j <= m ; j ++)
{
if(a[i][j] == '*' && check(i,j) && push(i,j) > k)o(i,j);
}
}
bool f = 1;
for(int i = 1; i <= n ; i ++)
{
for(int j = 1 ; j <= m ; j ++)
{
if(a[i][j] == '*' && st[i][j] == 0)f = false;
}
}
if(f)cout <<"YES"<<endl;
else cout <<"NO"<<endl;
}
return 0 ;
return 0 ;
}