NC204415. 膜法记录
描述
输入描述
第一行包含一个正整数,表示测试数据组数,接下来是组测试数据
每组测试数据的第一行有四个正整数 ,,,
接下来有行,每行是一个长度为的字符串,第行第列的字符如果是*则说明这里有一个敌人,如果是.说明这里没有
输出描述
对每组测试数据输出一行,如果能消灭所有的敌人,就输出yes,否则输出no
示例1
输入:
2 3 3 1 2 ..* .*. *.. 4 4 3 1 ..** **.. .**. *.**
输出:
yes no
说明:
第一个样例,我可以在第一行放一个行blast,然后前两列都放一个列blast,就把敌人给全歼了。第二个样例,我不管怎么安排攻击策略,都没法全歼敌人C++14(g++5.4) 解法, 执行用时: 14ms, 内存消耗: 480K, 提交时间: 2020-03-21 22:27:38
#include<bits/stdc++.h> using namespace std; char s[21][100007]; int main(){ int t;scanf("%d",&t); while(t--){ int n,m,a,b;scanf("%d %d %d %d",&n,&m,&a,&b); for(int i=0;i<n;i++) scanf("%s",s[i]); bool f=0; for(int i=0;i<(1<<n);i++){ int c=0,p=0; for(int j=0;j<n;j++) if((i>>j)&1) c++; if(c!=a) continue; for(int j=0;j<m;j++){ bool z=0; for(int k=0;k<n;k++) if(!((i>>k)&1)&&s[k][j]=='*') {z=1;break;} if(z) p++; } if(p<=b) {f=1;break;} } puts(f?"yes":"no"); } return 0; }
C++ 解法, 执行用时: 8ms, 内存消耗: 416K, 提交时间: 2022-01-03 02:00:19
#include<bits/stdc++.h> #define f(i,t) for(int i=0;i<(t);i++) using namespace std; char s[21][100001]; int main(){ cin.tie(0),cout.tie(0),ios_base::sync_with_stdio(0); int t;cin>>t; while(t--){ int n,m,a,b,f=0;cin>>n>>m>>a>>b; f(i,n)cin>>s[i]; f(i,1<<n){ int c=0,p=0; f(j,n)if((i>>j)&1)c++; if(c!=a)continue; f(j,m){ int z=0; f(k,n)if(!((i>>k)&1)&&s[k][j]=='*'){z=1;break;} if(z)p++; } if(p<=b){f=1;break;} }puts(f?"yes":"no"); } }