hdu 4891 模拟

题意:
      给你一个串,问你有几种意思,有两个规则
(1) { }  答案乘以  ({}之间"|"的个数 + 1)
 (2)  &&   答案乘以  (&&之间连续的' '的个数 + 1)
比如 {aa|dsd|}dasdaddda&   a  &的答案是
     (2 + 1)    *  (3+1) *(2 + 1) = 36

思路:

    直接模拟,结果我自己sb了wa了很多次,记得开INT64 ,为什么开,自己模拟下最大数据就知道了,一开始没有去想这个问题。一直怀疑自己读错题了,哎!还有就是提示一个小地方,就是计算连续空格个数的时候\n不算字符,就是'   '\n'  '算是连续的,别的没啥


#include
#include

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')  n --;
         if(c == '{')
         {       
            sum = 0;
            while(1)
            {       
               c = getchar();
               if(c == '\n')  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') { 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\n" ,ans);
   }
   return 0;
}



你可能感兴趣的:(ACM_水题)