给你一个串,问你有几种意思,有两个规则
(1) { } 答案乘以 ({}之间"|"的个数 + 1)
(2) && 答案乘以 (&&之间连续的' '的个数 + 1)
比如 {aa|dsd|}dasdaddda& a &的答案是
(2 + 1) * (3+1) *(2 + 1) = 36
思路:
直接模拟,结果我自己sb了wa了很多次,记得开INT64 ,为什么开,自己模拟下最大数据就知道了,一开始没有去想这个问题。一直怀疑自己读错题了,哎!还有就是提示一个小地方,就是计算连续空格个数的时候 不算字符,就是' ' ' '算是连续的,别的没啥
#include<stdio.h> #include<string.h> int main () { int i ,n ,mk; __int64 ans ,sum; char c; while(~scanf("%d" ,&n)) { getchar(); sum = mk = 0; ans = 1; while(n) { c = getchar(); if(c == ' ') n --; if(c == '{') { sum = 0; while(1) { c = getchar(); if(c == ' ') n --; if(c == '}') { ans *= (sum + 1); if(ans > 100000) mk = 1; break; } if(c == '|') sum ++; } } if(c == '$') { sum = 0; while(1) { c = getchar(); if(c == ' ') { n --;continue;} if(c == '$') { ans *= (sum + 1); if(ans > 100000) mk = 1; break; } if(c == ' ') sum ++; else { ans *= (sum + 1); if(ans > 100000) mk = 1; sum = 0; } } } } mk? puts("doge"):printf("%I64d " ,ans); } return 0; }
。