Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <bitset>
- #include <algorithm>
- using namespace std;
- ifstream fin("qmat.in");
- ofstream fout("qmat.out");
- bitset<11>ex[11];
- bitset<11>b[11];
- struct pm
- {
- int s;
- short n,m;
- bitset<11>a[11];
- };
- pm mt[10001];
- int g,p,i,j,q,n,m,s,sol;
- short f;
- int qx(pm a, pm b)
- {
- return a.s<b.s;
- }
- int lwrbnd(int x)
- {
- int s=1,d=g,m;
- while(s<=d)
- {
- m=(s+d)/2;
- if(x<=mt[m].s)
- d=m-1;
- else s=m+1;
- }
- return s;
- }
- int eg(int n,int m,int p)
- {
- int i,j;
- for(i=1;i<=n;i++)
- for(j=1;j<=m;j++)
- if(b[i][j]!=mt[p].a[i][j])return 0;
- return 1;
- }
- int main()
- {
- fin>>g;
- for(p=1;p<=g;p++)
- {
- fin>>mt[p].n>>mt[p].m;
- ex[mt[p].n][mt[p].m]=1;
- for(i=1;i<=mt[p].n;i++)
- for(j=1;j<=mt[p].m;j++)
- {
- fin>>f;
- if(f==1)mt[p].a[i][j]=1;
- else mt[p].a[i][j]=0;
- mt[p].s+=f;
- }
- }
- sort(mt+1,mt+g+1,qx);
- for(fin>>q;q;q--)
- {
- fin>>n>>m;
- s=0;
- for(i=1;i<=n;i++)
- for(j=1;j<=m;j++)
- {
- fin>>f;
- if(f==1)b[i][j]=1;
- else b[i][j]=0;
- s+=f;
- }
- if(ex[n][m])
- for(p=lwrbnd(s);mt[p].s==s;p++)
- if(mt[p].n==n && mt[p].m==m)
- sol+=eg(n,m,p);
- }
- fout<<sol<<"\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement