Codeforces 309B

来源:互联网 发布:linux nano命令 编辑:程序博客网 时间:2024/06/08 15:28

倍增一下就好了

#include<cstdio>#include<cstring>using namespace std;int a[1000005],nex[1000005],ans[1000005];char s[6000005];int n,r,c,t=1;void ksm(int x){    if(!x)return ;    ksm(x>>1);    for(int i=1;i<=n;i++){        ans[i]=ans[ans[i]];        if(x&1)ans[i]=nex[ans[i]];    }}int main(){    #ifdef DouBi    freopen("in.cpp","r",stdin);    #endif // DouBi    while(scanf("%d%d%d",&n,&r,&c)!=EOF){        a[1]=0;        for(int i=1;i<=n;i++)            scanf("%s",s+a[i]),            a[i+1]=a[i]+strlen(s+a[i]),            s[a[i+1]++]=' ';        for(int i=n+1,j=n+1;i;i--){            while(a[j]-a[i]>c+1)j--;            nex[ans[i]=i]=j;        }        ksm(r);t=1;        for(int i=2;i<=n;i++)            if(ans[i]-i>ans[t]-t)                t=i;        for(int i=1;i<=r;i++,t=nex[t],puts(""))            for(int j=a[t];j+1<a[nex[t]];j++)putchar(s[j]);    }    return 0;}
0 0
原创粉丝点击