首页 > 代码库 > HDU4891 - The Great Pan
HDU4891 - The Great Pan
题意
太长不好概述
思路
1. 求每个{}内的‘|’个数, ans *= ‘|’个数+1
2. $$之间每连续的空格个数,每有一个连续的n个空格,ans *= 空格+1
3. 每个{},$$之间是独立的,所求ans相乘
4. 不存在{}, $$之间或自己的嵌套,所以没坑,思路不难
5. 一定要时刻判断超没超1e5,减少循环次数
总结
WA在了long long上,微笑脸。
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 const int maxn = 1e5; 7 typedef long long LL; 8 int n; 9 string s; 10 LL format1() 11 { 12 LL ans = 1, t = 1; 13 LL len = s.size(); 14 bool flag = false; 15 for(LL i = 0; i < len; i++){ 16 if(s[i] == ‘{‘ && !flag){ 17 flag = true; 18 t = 1; 19 } 20 else if(s[i] == ‘|‘ && flag) { 21 t++; 22 if(t > maxn) return t; 23 } 24 else if(s[i] == ‘}‘ && flag){ 25 flag = false; 26 ans *= t; 27 if(ans > maxn) return ans; 28 } 29 } 30 return ans; 31 } 32 LL format2() 33 { 34 LL ans = 1, t = 1; 35 LL len = s.size(); 36 bool flag = false; 37 for(LL i = 0; i < len; i++){ 38 if(s[i] == ‘$‘ && !flag){ 39 flag = true; 40 t = 1; 41 } 42 else if(s[i] == ‘ ‘ && flag){ 43 t++; 44 if(t > maxn) return t; 45 if(s[i+1] != ‘ ‘){ 46 ans *= t; 47 t = 1; 48 if(ans > maxn) return ans; 49 } 50 } 51 else if(s[i] == ‘$‘ && flag){ 52 flag = false; 53 } 54 } 55 return ans; 56 } 57 int main() 58 { 59 //freopen("in.txt", "r", stdin); 60 while(scanf("%d", &n) != EOF){ 61 getchar(); 62 s = ""; 63 for(int i = 0; i < n; i++){ 64 string temp; 65 getline(cin , temp); 66 s += temp; 67 } 68 bool doge = false; 69 LL ans = 0; 70 LL ans1 = format1(); 71 if(ans1 > maxn) doge = true; 72 else{ 73 LL ans2 = format2(); 74 if(ans2 > maxn) doge = true; 75 else{ 76 ans = ans1 * ans2; 77 if(ans > maxn) doge = true; 78 } 79 } 80 if(doge) cout << "doge" << endl; 81 else cout << ans << endl; 82 } 83 return 0; 84 }
HDU4891 - The Great Pan
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。