hdu 4891 模拟

来源:互联网 发布:二维旋转矩阵的推导 编辑:程序博客网 时间:2024/06/05 14:27
题意:
      给你一个串,问你有几种意思,有两个规则
(1) { }  答案乘以  ({}之间"|"的个数 + 1)
 (2)  &&   答案乘以  (&&之间连续的' '的个数 + 1)
比如 {aa|dsd|}dasdaddda&   a  &的答案是
     (2 + 1)    *  (3+1) *(2 + 1) = 36

思路:

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


#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')  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;}



0 0
原创粉丝点击