VP情况 4 / 8
AC: A,B,D,E1 60 minutes
WA: C
手速还在线
C假题了,一直没有调出来wa2
正确作法是找点 '* '从左上和右上方向遍历,记录路径长度,直到其中有一方超出边界或者点不为 '*',终止。如果路径长度大于等于d就将路径上的每个点标记值++
最后check ,如果有点为 '*'但标记值为0就说明不符合条件
细节见代码:
// AC one more times ////////////////////////////////////////INCLUDE////////////////////////////////////////// #include <iostream> #include <algorithm> #include <cstdio> #include<string> #include<string.h> #include <cstring> #include <complex> #include <cmath> #include <vector> #include <stack> #include <queue> #include <map> #include <set> #include <string> #include <list> #include <bitset> #include <assert.h> #include <unordered_set> #include <unordered_map> #include <iomanip> #include <random> #include <iterator> #include <time.h> using namespace std; /////////////////////////////////////////DEFINE////////////////////////////////////////// #define fi first #define se second #define pb push_back #define endl '\n' #define all(x) (x).begin(), (x).end() #define inf64 0x3f3f3f3f3f3f3f3f typedef long long LL; typedef unsigned long long ULL; typedef pair<int, int> PII; typedef pair<long long,long long> PLL; ////////////////////////////////////////CONST//////////////////////////////////////////// const int inf = 0x3f3f3f3f; const int maxn = 2e6 + 6; const double eps = 1e-8; const int mod = 1000000; ///////////////////////////////////////FUNCTION////////////////////////////////////////// template<typename T> void init(T q[], int n, T val){ for (int i = 0; i <= n; i++) q[i] = val; } int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } bool cmp(int c, int d) { return c > d; } bool cmp1(PII c, PII d) { return c.fi > d.fi; } int cnt, c[100][100],n,m,k; char op[100][100]; bool st; int d; void search(int x,int y) { int t1x=x,t2x=x,t1y=y,t2y=y; while(1) { int jishu=0; t1x=t1x-1,t1y=t1y-1; t2x=t2x-1,t2y=t2y+1; if(t1x>=0&&t1x<n&&t1y>=0&&t1y<m) if(op[t1x][t1y]=='*') jishu++; if(t2x>=0&&t2x<n&&t2y>=0&&t2y<m) if(op[t2x][t2y]=='*') jishu++; if(jishu<2) break; cnt++; } if(cnt>=k) { c[x][y]++; t1x=t2x=x,t1y=t2y=y; while(cnt--) { t1x=t1x-1,t1y=t1y-1; t2x=t2x-1,t2y=t2y+1; if(t1x>=0&&t1x<n&&t1y>=0&&t1y<m) if(op[t1x][t1y]=='*') c[t1x][t1y]++; if(t2x>=0&&t2x<n&&t2y>=0&&t2y<m) if(op[t2x][t2y]=='*') c[t2x][t2y]++; } } } void solve() { cin>>n>>m>>k; st=false; memset(c,0,sizeof c); for(int i=0;i<n;i++) cin>>op[i]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if( op[i][j]=='*' && ( i-1>=0 && j-1>=0 && j+1<m) ) { cnt=0; search(i,j); } for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(op[i][j]=='*'&&c[i][j]<=0) st=true; else if(op[i][j]=='.'&&c[i][j]>=1) st=true; if(st) cout<<"NO"<<endl; else cout<<"YES"<<endl; return; } int main() { std::ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr); int T;cin>>T;for(int i=1;i<=T;i++) solve(); return 0; }