1 条题解
-
0
【例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