Stamp Grid(USACO23 FEB Bronze T2)
题目:
这题直接暴力旋转印章再暴力比较是否有多余的黑色,如果没有,进行涂色即可,不需要任何优化。
注意:画布不可以旋转。
肝程序.jpg 程序一会发
注:虽然我喜欢用string但用string一直莫名其妙的错,懒得改了,就换成了char
程序:
#include<bits/stdc++.h> using namespace std; long long t,n,k; char a[21][21],b[21][21],c[21][21]; bool p[21][21]; int boo,boo2; int main() { ios::sync_with_stdio(false); cin>>t; while(t--) { memset(a,0,sizeof a); memset(b,0,sizeof b); memset(c,0,sizeof c); memset(p,0,sizeof p); boo=0; boo2=0; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; cin>>k; for(int i=1;i<=k;i++) for(int j=1;j<=k;j++) cin>>b[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(a[i][j]=='.') p[i][j]=1; for(int v=1;v<=4;v++) { for(int i=1;i<=n-k+1;i++) { for(int j=1;j<=n-k+1;j++) { for(int w=1;w<=4;w++) { boo=0; for(int f=1;f<=k;f++) for(int g=1;g<=k;g++) c[g][k-f+1]=b[f][g]; for(int f=1;f<=k;f++) for(int g=1;g<=k;g++) b[f][g]=c[f][g]; for(int f=i;f<=i+k-1;f++) for(int g=j;g<=j+k-1;g++) if(a[f][g]=='.'&&b[f-i+1][g-j+1]=='*') boo=1; if(!boo) for(int f=i;f<=i+k-1;f++) for(int g=j;g<=j+k-1;g++) if(a[f][g]=='*'&&b[f-i+1][g-j+1]=='*') p[f][g]=1; } } } } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(!p[i][j]) boo2=1; if(!boo2) printf("YES\n"); else printf("NO\n"); } return 0; }