P1928. 外星密码

考点

  • 模拟
  • 字符串
  • 分治

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <bits/stdc++.h>

using namespace std;

string read()
{
string s;
char c;
while (cin >> c)
{
if (c == '[')
{
int n;
cin >> n;
string t = read();
while (n--)
s += t;
}
else if (c == ']')
break;
else
s += c;
}
return s;
}

int main()
{
cout << read();
}

思路

字符串的模拟题,先考虑逐个字符读入还是整行读入;很显然,本题应该选择逐字符读入

  • 由于每个闭合的[]实际上就是一个字符串,很容易联想到递归,每次处理完后返回结果字符串

  • [数字就可以视作递归开始符,只要遇到了[数字就开启新的递归

  • ]可以视作递归结束符,只要遇到了它就返回当前递归的结果字符串

  • 正常字母接在当前递归的结果字符串即可

根据上述思路,就可以编写题解啦