首页 > 代码库 > HDU4891-The Great Pan
HDU4891-The Great Pan
题意:找出一共有多少中不同的问题的理解
思路:题目本身比较难读懂,但看明白之后就很简单了。其实可以先将所有字符串连接在一起,形成一个大字符串,然后再对整个字符串进行查找。
只要关心两种操作符就可以了。
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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。