AT_tenka1_2015_qualB_b 题解

发布时间 2023-07-28 14:34:43作者: So_noSlack

洛谷链接&Atcoder 链接

本篇题解为此题较简单做法较少码量,并且码风优良,请放心阅读。

题目简述

给定一个集合形式,判断此集合是 dict 还是 set

思路

简单的模拟题

首先需要特判 {} 的情况,应直接输出 dict

接着观察两个集合的特征,很容易即可发现 dictset 的最明显的区别就是一个有 : 一个没有,而我们需要注意 expr 可是任何集合或者数字,所以有可能出现 {1,{2:3}} 的情况,而这种情况就不能直接看有无冒号进行判断了

我们需要用 \(num\) 来记录当前是第几层括号,如果在第一层括号中发现了冒号,那么这个集合就是 dict 了,反之就是 set

经过以上分析,很容易即可写出代码了:

#include<iostream>
using namespace std;

string str;

int main() {
	cin >> str;
  	// 特判 {} 的情况
	if(str.length() == 2) {
		cout << "dict\n";
		return 0;
	}
	int num = 0; // num 记录层数
	for(int i = 0; i <= str.length(); i ++) {
		if(str[i] == '{') num ++; // 遇到 { 层数加 1
		if(str[i] == '}') num --; // 遇到 } 层数减 1
		if(str[i] == ':' && num == 1) {
			cout << "dict\n"; // 最外层遇到 :
			return 0;
		}
	}	
	cout << "set\n"; // 换行好习惯
	return 0;
}

提交记录

\[\text{The End!} \]