题意:找出一共有多少中不同的问题的理解
思路:题目本身比较难读懂,但看明白之后就很简单了。其实可以先将所有字符串连接在一起,形成一个大字符串,然后再对整个字符串进行查找。
只要关心两种操作符就可以了。
1、{},只要将大括号里面的'|'的数量加上1,然后乘以ans
2、$$,将在内部遇到n个连续的空格就把ans乘以n + 1
最后注意ans在运算的过程中超int类型的范围
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
const int MAXN = 100000;
int n, cnt1, cnt2, flag;
long long ans;
string s, t;
int main() {
while (scanf("%d", &n) != EOF) {
getchar();
s.clear();
for (int i = 0; i < n; i++) {
getline(std::cin, t);
s += t;
}
ans = cnt1 = flag = 1;
cnt2 = 2;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '{')
flag = 0;
else if (s[i] == '}') {
flag = 1;
ans *= cnt1;
if (ans > MAXN)
break;
cnt1 = 1;
}
else if (s[i] == '$') {
flag = -flag;
}
if (flag == 0) {
if (s[i] == '|')
cnt1++;
}
if (flag == -1) {
if (s[i] == ' ' && s[i + 1] == ' ')
cnt2++;
else if (s[i] == ' '){
ans *= cnt2;
cnt2 = 2;
}
if (ans > MAXN)
break;
}
}
if (ans > MAXN)
printf("doge\n");
else
printf("%lld\n", ans);
}
return 0;
}