首页 > 代码库 > 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