Cod sursa(job #1351014)

Utilizator usermeBogdan Cretu userme Data 21 februarie 2015 08:54:21
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <cstdio>

FILE*f=fopen("sirag2.in","r");
FILE*h=fopen("sirag2.out","w");

int n,L,s[100001],l[100001],v[100001],d[100001],t;

int main(){
    fscanf(f,"%d",&t);
    while ( t ){
        --t;
        fscanf(f,"%d%d\n",&n,&L);
        for ( int i=0;i<n;++i ){
            char c;
            fscanf(f,"%c",&c);
            if ( i<L ){
                l[i]=c;
                v[i]=1;
                if ( c=='*' )
                    s[i]=1;
                else
                    s[i]=0;
            }
            else {
                if ( c=='*' ){
                    s[i]=s[i-L]+1;
                    v[i]=v[i-L]+1;
                    l[i]=s[i-L];
                }
                else
                    if ( c==l[i-L]||l[i-L]=='*' ){
                        l[i]=c;
                        s[i]=0;
                        v[i]=v[i-L]+1;
                    }
                    else {
                        l[i]=c;
                        s[i]=0;
                        v[i]=1+s[i-L];
                    }
            }
        }
        int x=0,y=-1,maximin=0;
        for ( int i=0;i<n;++i ){
            while ( x<=y&&v[i]<v[d[y]] )
                --y;
            ++y;
            d[y]=i;
            if ( d[x]==i-L )
                ++x;
            if ( i>=L )
                if ( maximin<v[d[x]] )
                    maximin=v[d[x]];
        }
        fprintf(h,"%d\n",maximin*L);
    }
    return 0;
}