警示后人(D题)
D题如果你wa了#2和#21
注意全1的情况,此时计划数p为0,而不是输出-1
附上本人代码(码风不好见谅)
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define N 10
#define ll long long
#define INF 0x7fffffff
#define endl '\n'
int n,m,q;
int a[N][N];
int plan[N][N][N];
int tmp[N][N];
bool check()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(tmp[i][j]==0) return 0;
}
}
return 1;
}
void solve()
{
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
char c;
cin>>c;
a[i][j]=c-'0';
}
}
for(int i=0;i<q;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=m;k++)
{
char c;
cin>>c;
plan[i][j][k]=c-'0';
}
}
}
vector<int> ans;
int minn=10;
for(int i=0;i<=(1<<q)-1;i++)
{
memset(tmp,0,sizeof(tmp));
vector<int> v;
for(int j=0;j<q;j++)
{
if(i&(1<<j))
{
v.push_back(j+1);
for(int i1=1;i1<=n;i1++)
{
for(int j1=1;j1<=m;j1++)
{
tmp[i1][j1]|=plan[j][i1][j1];
}
}
}
}
for(int i1=1;i1<=n;i1++)
{
for(int j1=1;j1<=m;j1++)
{
tmp[i1][j1]^=a[i1][j1];
}
}
if(i==0&&check())
{
cout<<0;
return;
}//特判
if(check())
{
if(v.size()<minn)
{
minn=v.size();
ans=v;
}
}
}
if(ans.size()==0)
{
cout<<-1;
}
else
{
cout<<ans.size()<<endl;
for(auto x:ans)
{
cout<<x<<" ";
}
}
}
int main(){
IOS;
int t=1;
//cin>>t;
while(t--)
{
solve();
}
return 0;
}

