ABC366B Vertical Writing
原题链接:B - Vertical Writing
Tag:模拟
题目描述
给定一段横排文本,请将其转换为竖排文本,并用 *
填充空白。
给定 \(N\) 个由小写英文字母组成的字符串 \(S_1,S_2,\dots,S_N\)。这些字符串中最长的长度为 \(M\)。
请输出满足以下条件的 \(M\) 个字符串 \(T_1,T_2,\dots,T_M\)。
- 每个 \(T_i\) 由小写字母和
*
组成 - 每个 \(T_i\) 的末尾不能是
*
- 对于每个 \(1 \leq i \leq N\),满足以下条件:
- 对于每个 \(1 \leq j \leq |S_i|\),字符串 \(T_j\) 的第 \(N-i+1\) 个字符存在,并且将 \(T_1,T_2,\dots,T_{|S_i|}\) 中的第 \(N-i+1\) 个字符按顺序连接起来后,恰好构成字符串 \(S_i\)
- 对于每个 \(|S_i| + 1 \leq j \leq M\),字符串 \(T_j\) 的第 \(N-i+1\) 个字符要么不存在,要么是
*
其中,\(|S_i|\) 表示字符串 \(S_i\) 的长度。
数据说明:
- \(N\) 是 \(1\) 到 \(100\) 之间的整数
- \(S_i\) 是长度为 \(1\) 到 \(100\) 的小写字母字符串
分析
直接按题意模拟即可。
代码实现
void NeverSayNever() {
int n;
cin >> n;
vector<string> vec(n + 1);
for (int i = 1; i <= n; i++) cin >> vec[i];
int mx = 0;
for (int i = 1; i <= n; i++) {
mx = max(mx, (int) vec[i].size());
}
for (int i = 1; i <= n; i++) {
while (vec[i].size() < mx) {
vec[i] += '*';
}
}
for (int i = 0; i < mx; i++) {
string res;
for (int j = n; j >= 1; j--) {
res += vec[j][i];
}
while (res.back() == '*') {
res.pop_back();
}
cout << res << endl;
}
}
日志
本页面创建于 2024/8/17 20:13