1 条题解

  • 0
    @ 2067-6-17 3:24:53

    【例74.2】 古风排版

    解题思路

    设每列N字符,列数C=ceil(L/N)。输入第k字符放在行k%N、列C-1-k/N;新图先用空格填满,补齐最后不足列,再按N行输出。

    正确性说明

    依照上述推导,逐步维护已处理部分的有效状态。每一步都完成当前项的贡献且不改变已确定的次序,结束时输出的状态恰好对应题目要求。

    易错点

    空格也是原文字符,必须getline;最后一列不足部分用空格补齐。

    复杂度

    时间O(NC),空间O(NC)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int N;
        cin >> N;cin.ignore(numeric_limits<streamsize>::max(),'
    ');string s;getline(cin,s);int C=(s.size()+N-1)/N;vector<string>out(N,string(C,' '));for(int k=0;k<int(s.size());k++)out[k%N][C-1-k/N]=s[k];for(auto &r:out)cout<<r<<"\n";
        return 0;
    }
    
    • 1

    信息

    ID
    480
    时间
    1000ms
    内存
    256MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者