细节模拟——cf1267L

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了细节模拟——cf1267L相关的知识,希望对你有一定的参考价值。

细节很多,改了好久。。

/*
按阶梯状贪心填入字符,当第k行被填满后,再去填其他空位 
*/
#include<bits/stdc++.h>
using namespace std;
#define N 2005

char s[N*N],t[N*N],ans[N][N];
int n,l,k,len;

int main(){
    cin>>n>>l>>k;
    scanf("%s",s+1);
    len=n*l;
    memcpy(t,s,sizeof s);
    sort(t+1,t+1+len);
    
    int p=0;
    if(k==1){//特殊情况 
        for(int i=1;i<=n;i++){
            for(int j=1;j<=l;j++)
                cout<<t[++p];
            puts("");
        }
    }
    
    int up=1,right=1;
    while(1){
        for(int i=up;i<=k;i++)
            ans[i][right]=t[++p];
        for(int i=k;i>=up+1;i--)
            if(ans[i][right]!=ans[i-1][right]){
                up=i;break;
            }
        if(up==k||right==l)break;
        right++;
    }
    
    for(int j=1;j<=l;j++)
        if(ans[k][j]==0)ans[k][j]=t[++p];    
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=l;j++)
            if(ans[i][j]==0)ans[i][j]=t[++p];
    
    for(int i=1;i<=n;i++)cout<<(ans[i]+1)<<
;
} 

 

以上是关于细节模拟——cf1267L的主要内容,如果未能解决你的问题,请参考以下文章