洛谷 P5483 小A的烦恼 题解
2023-12-14 23:02:31
STEP 1:简化题意
题目简单来说就是输入几个表格,然后把它们按先后顺序排成一排,合成一个大表格,进行输出。
STEP 2:思路推导
题目是一个接一个表格输入,把每个位置的数据当做字符串,用一个 string?类型的数组把它们保存下来。
STEP 3:分析难点
本题难点主要在处理数据上,比较叫人头大的点在于它的输入是用逗号隔开的。
因此我们必须集体输入一行,再进行提取
STEP 4:避开坑点
- 每行输出最后不加逗号。
- 输入的每个表格还有个题目,也得当做数据处理。
- 表格里的每个元素并不是只有一个字符,得用 string?来存储其中每个位置的数据(具体操作见代码)。
AC 代码:
注释比较多,希望你能认真看。
#include<bits/stdc++.h>
using namespace std;
string ans[110][10001], tmp;
// tmp 是临时字符串。
int n, m, now = 1, maxn = -100;
// now 是记录目前已经存到第几列了,也是 ans 数组宽度(见输出)。
// maxn 是最大的行数(即输出的行数)。
inline int read() {
char c;
int x = 0, f = 1;
c = getchar();
while (c < '0' || c > '9') {
if (c == '-')f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
int main() {
n = read();
while (n--) {
int t = -100;
m = read();maxn = max(maxn, m);
cin >> tmp;
ans[0][now] = tmp;
// 标题也得存入数组。
for (int k = 1; k <= m; k++) {
cin >> tmp;
int g = 0, tot = 0;
// g 是每个元素的起始点, tot 是每行元素的个数。
int l = tmp.size();
tmp += ",";// 加一个逗号,方便后面区分元素。
for (int i = 0; i <= l; i++) {
if (tmp[i] == ',') {
ans[k][tot + now] = tmp.substr(g, i - g );
// 从 g 开始,g ~ i - 1都属于这个元素。
g = i + 1;// 更新起始位置。
tot++;
}
}
t = max(t, tot);
}
now += t;
}
for (int i = 0; i <= maxn; i++) { // 标题在第 0 行。
for (int j = 1; j < now - 1; j++)
cout << ans[i][j] << ',';
cout << ans[i][now - 1] << '\n';
}
return 0;
}
这是一篇很正经的题解
文章来源:https://blog.csdn.net/2202_75696835/article/details/132744050
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!