P7964 [COCI2021-2022#2] Kaučuk 题解
作者:互联网
这道题就是大模拟。
直接模拟三层标题,为了方便,可以使用结构体。
三层标题套在一起,一定要细心,很容易出错。
如果直接三维存字符串可能会爆空间,题目中 \(n\) 只有 \(100\),开一个字符串数组存标题,三维存标题数组下标,空间就不会爆。
用一个结构体 \(nod\) 存一个二级标题以及子三级标题,其中 \(s3z\) 表示三级标题数量,数组 \(s3\) 存三级标题。
用一个结构体 \(node\) 存一个一级标题以及子二级标题,其中 \(s2z\) 表示二级标题数量,数组 \(s2\) 存二级标题。
变量 \(az\) 表示一级标题数量,变量 \(sz\) 表示所有标题数量。
注意结构体里存的标题都是标题数组 \(s\) 的下标。
#include <bits/stdc++.h>
using namespace std;
struct nod{
int s2, s3z;
int s3[101];
};
struct node{
int s1, s2z;
nod s2[101];
}a[101];
int n, az, sz;
string s[101];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
string as, bs;
cin >> as >> bs;
s[++sz] = bs; //先入标题数组,++sz表示先把大小加1,在存标题,下同。
if(as == "section") a[++az].s1 = sz;
else if(as == "subsection") a[az].s2[++a[az].s2z].s2 = sz; //a[az].s2z是当前二级标题
else a[az].s2[a[az].s2z].s3[++a[az].s2[a[az].s2z].s3z] = sz; //a[az].s2z是当前二级标题,a[az].s2[a[az].s2z].s3z是当前三级标题
}
for(int i = 1; i <= az; i++) { //逐级输出
cout << i << " " << s[a[i].s1] << endl;
for(int j = 1; j <= a[i].s2z; j++) {
cout << i << "." << j << " " << s[a[i].s2[j].s2] << endl;
for(int k = 1; k <= a[i].s2[j].s3z; k++) cout << i << "." << j << "." << k << " " << s[a[i].s2[j].s3[k]] << endl;
}
}
return 0;
}
标签:sz,COCI2021,int,题解,标题,Kau,s2,s2z,az 来源: https://www.cnblogs.com/sunskydp/p/solution-p7964.html