Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #include <stdio.h>
  2. const int bb=4,base=(1<<bb),full=(1<<base)-1;
  3. 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];
  4. int main() {
  5.   for (i=0; i<=full; i++) {
  6.     for (j=p=0; j<base; j++) if (i&(1<<j)) p++; else {
  7.       if (p>ib[i]) ib[i]=p;
  8.       if (p==j) st[i]=p;
  9.       p=0;
  10.     }
  11.     eb[i]=p;
  12.     if (p>ib[i]) ib[i]=p;
  13.   }
  14.   scanf("%d",&t);
  15.   for (tt=1; tt<=t; tt++) {
  16.     scanf("%d%d",&n,&m); r=0;
  17.     if (m&(base-1)) z=(m>>bb)+1; else z=(m>>bb);
  18.     zz=(z<<bb);
  19.     for (i=0; i<n; i++) {
  20.       scanf("%d%d",&k,&c); p=0;
  21.       for (j=0; j<k; j++) {
  22.         scanf("%d",&x); c=1-c;
  23.         for (; x>0; x--,p++) a[p]=c;
  24.       }
  25.       for (; p<zz; p++) a[p]=0;
  26.       for (j=e=0; j<zz; e++) {
  27.         b[i][e]=0;
  28.         for (p=0; p<base; p++, j++) b[i][e]=(b[i][e]<<1)+a[j];
  29.       }
  30.     }
  31.     for (i=0; i<n; i++) {
  32.       for (j=0; j<z; j++) a[j]=full;
  33.       for (k=i; k<n; k++) {
  34.         for (j=0; j<z; j++) a[j]&=b[k][j];
  35.         s=ib[a[0]];
  36.         for (j=1; j<z; j++) if (ib[a[j]]>s) s=ib[a[j]];
  37.         for (j=0; j<z-1; j++) {
  38.           for (c=st[a[j]]; j+1<z-1 && a[j+1]==full; j++) c+=base;
  39.           if (c+eb[a[j+1]]>s) s=c+eb[a[j+1]];
  40.         }
  41.         if (s*(k-i+1)>r) r=s*(k-i+1);
  42.       }
  43.     }
  44.     printf("Case %d: %d\n",tt,r);
  45.   }
  46.   return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement