2014多校第三场1005 || HDU 4891 The Great Pan(模拟)

题目链接

题意 : 给你n行字符串,问你有多少种理解方式。有两大类的理解

(1){A|B|C|D|...}代表着理解方式可以是A,可以是B或C或者D。

(2)$blah blah$,在$$这两个符号中间,如果是不连续的空格的那个位置就有2种理解方式,可以理解为没有空格也可以理解为有空格。如果有连续N个空格的位置,那里就有N+1种理解方式。

最后所有的理解方式相乘,数据保证$一定与$匹配,{一定与匹配},不会有任何嵌套,类似{$$}或者{{}}或者${}$这种情况都不会出现,也不会有{$}这种情况,所有的${}这些符号一定有匹配的。

输出多少种理解方式。

思路 : 模拟,但是由于我们在做的时候一直以为数据范围不会超,就一直WA,后来我直接找特殊数据找的恶心,又看了代码觉得没有错,就放弃了,对不起二师兄。。。。。直接贴YN的代码吧,不想写了,恶心

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <queue>
 7 #include <set>
 8 #include <map>
 9 #include <string>
10 #include <math.h>
11 #include <stdlib.h>
12 #define clear(A, X, SIZE) memset(A, X, sizeof(A[0]) * (SIZE))
13 #define clearall(A, X) memset(A, X, sizeof(A))
14 #define max( x, y )  ( ((x) > (y)) ? (x) : (y) )
15 #define min( x, y )  ( ((x) < (y)) ? (x) : (y) )
16 
17 using namespace std;
18 
19 int main()
20 {
21    // freopen("data1.txt","r",stdin);
22     int n,temp,cnt;
23     long long ans ;
24     char c,x;
25     while(scanf("%d",&n)!=EOF)
26     {
27         x = getchar();
28         while(x != '
')
29             x = getchar() ;
30         bool flat1 = false , flat2 = false , flat = true ;
31         ans = 1 ;
32         temp = 1 ;
33         while(n--)
34         {
35             c = getchar();
36             while(c != '
')
37             {
38                 if(flat)
39                 {
40                     if(ans > 100000 || temp > 100000)
41                     {
42                         ans = 1000000;
43                         flat = false;
44                         continue;
45                     }
46                     if(c == '{')
47                     {
48                         flat1 = true ;
49                         cnt = 1 ;
50                     }
51                     else if(c == '}')
52                     {
53                         ans *= cnt ;
54                         flat1 = false;
55                     }
56                     else if(flat1 && c == '|')
57                     {
58                         cnt ++ ;
59                     }
60                     else if(!flat2 && c == '$')
61                     {
62                         flat2 = true ;
63                         temp = 1 ;
64                         cnt = 1 ;
65                     }
66                     else if(flat2 && c == '$')
67                     {
68                         temp *= cnt;
69                         ans *= temp;
70                         flat2 = false;
71                     }
72                     else if(flat2 && c == ' ')
73                     {
74                         cnt ++ ;
75                     }
76                     else if(flat2 && c != ' ')
77                     {
78                         temp *= cnt ;
79                         cnt = 1 ;
80                     }
81                 }
82                 c = getchar();
83             }
84         }
85         if(ans > 100000) puts("doge");
86         else printf("%I64d
",ans);
87     }
88     return 0;
89 }
View Code
原文地址:https://www.cnblogs.com/luyingfeng/p/3876223.html