Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- const int bb=4,base=(1<<bb),full=(1<<base)-1;
- int e,n,m,t,tt,i,j,p,c,z,zz,s,r,k,x,a[2222],b[2222][2222],ib[full+5],eb[full+5],st[full+5];
- int main() {
- for (i=0; i<=full; i++) {
- for (j=p=0; j<base; j++) if (i&(1<<j)) p++; else {
- if (p>ib[i]) ib[i]=p;
- if (p==j) st[i]=p;
- p=0;
- }
- eb[i]=p;
- if (p>ib[i]) ib[i]=p;
- }
- scanf("%d",&t);
- for (tt=1; tt<=t; tt++) {
- scanf("%d%d",&n,&m); r=0;
- if (m&(base-1)) z=(m>>bb)+1; else z=(m>>bb);
- zz=(z<<bb);
- for (i=0; i<n; i++) {
- scanf("%d%d",&k,&c); p=0;
- for (j=0; j<k; j++) {
- scanf("%d",&x); c=1-c;
- for (; x>0; x--,p++) a[p]=c;
- }
- for (; p<zz; p++) a[p]=0;
- for (j=e=0; j<zz; e++) {
- b[i][e]=0;
- for (p=0; p<base; p++, j++) b[i][e]=(b[i][e]<<1)+a[j];
- }
- }
- for (i=0; i<n; i++) {
- for (j=0; j<z; j++) a[j]=full;
- for (k=i; k<n; k++) {
- for (j=0; j<z; j++) a[j]&=b[k][j];
- s=ib[a[0]];
- for (j=1; j<z; j++) if (ib[a[j]]>s) s=ib[a[j]];
- for (j=0; j<z-1; j++) {
- for (c=st[a[j]]; j+1<z-1 && a[j+1]==full; j++) c+=base;
- if (c+eb[a[j+1]]>s) s=c+eb[a[j+1]];
- }
- if (s*(k-i+1)>r) r=s*(k-i+1);
- }
- }
- printf("Case %d: %d\n",tt,r);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement