公式
I - 改行コード/CR LF 解説
by
I - 改行コード/CR LF 解説
by
Nyaan
この問題は 2 種類の改行コード (CR, LF) の本来の挙動をテーマとした問題です。
問題文に書かれた内容をナイーブに実装すると\(\mathrm{O}(Q^2)\) の計算量がかかってしまうため、なんらかの高速化が必要です。これは例えば文字列を std::deque<std::string> や std::vector<std::string> で管理するなどの方法によって計算量改善が達成できます。(詳細は実装例を参考にしてください)
実装例の計算量は \(\mathrm{O}(Q)\) で十分高速です。
- 実装例 (C++)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int H = 0, W = 0;
string cur;
vector<string> buf[1500000 + 3];
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
int Q;
cin >> Q;
while (Q--) {
int cmd;
cin >> cmd;
if (cmd == 1) {
char c;
cin >> c;
cur.push_back(c);
W++;
} else if (cmd == 2) {
buf[H].push_back(cur);
cur.clear();
W = 0;
} else if (cmd == 3) {
buf[H].push_back(cur);
cur.clear();
H++, W = 0;
}
}
if (!cur.empty()) buf[H].push_back(cur);
cout << H + 1 << " " << W + 1 << endl;
for (int i = 0; i <= H; i++) {
cout << "# ";
for (int j = (int)buf[i].size() - 1; j >= 0; j--) cout << buf[i][j];
cout << "\n";
}
}
投稿日時:
最終更新:
