首页 > 代码库 > 2014多校第三场1005 || HDU 4891 The Great Pan(模拟)
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 != ‘\n‘)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 != ‘\n‘)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\n",ans);87 }88 return 0;89 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。