NC219037. 消灭星星
描述
输入描述
第一行给出一个正整数,表示组输入
每组输入先给出三个正整数
接下来给出一个的字符矩阵输入保证给出的字母是前个大写字母
输出描述
对应每组输入在一行中输出 "yes" or "no"
示例1
输入:
3 5 2 1 ....* *AA.. *A**. ..*.B ..*BB 5 2 1 ....* *AA.. *A**. ..**B ..*BB 5 2 1 ....* *AA.. *A.*. ..**B ..*BB
输出:
yes no yes
C++(clang++11) 解法, 执行用时: 3ms, 内存消耗: 396K, 提交时间: 2021-03-21 09:47:16
#include<bits/stdc++.h> using namespace std; int main() { int i,j,k,s,n,m,t,T; char R[25][25]; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&t); for(i=0;i<n;i++)scanf("%s",R[i]); for(i=0;i<(1<<m);i++) { bool V[15]={0},H[25]={0},L[25]={0},flag=1; for(s=j=0;j<m;j++)if((1<<j)&i)V[j]=1,s++; if(s!=m-t)continue; for(j=0;j<n;j++) for(k=0;k<n;k++)if(R[j][k]>='A'&&R[j][k]<='Z'&&V[R[j][k]-'A'])H[j]=L[k]=1; for(j=0;flag&&j<n;j++) for(k=0;flag&&k<n;k++)if(R[j][k]=='*'&&H[j]&&L[k])flag=0; if(flag)break; } if(i<(1<<m))printf("yes\n"); else printf("no\n"); } return 0; }