其他分享
首页 > 其他分享> > P7964 [COCI2021-2022#2] Kaučuk 题解

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