这道题的坑在----过程中即使使用long long 也会超出范围
自己看了很久读了很多遍题还是没想到
记得当时的想法是----反正我用了long long 已经是最大的范围了,肯定没法用更大的类型--即使unsigned也只是 比long long 大一倍,现在回头看,这种想法太唯心,不是理性分析的结果啊,,
代码:
//1005 #include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <iostream> using namespace std; #define ll long long const ll lim=1e5; int main() { //freopen("hdu1005.txt","r",stdin); ll cnt,ans,kr,sp,n; char c; int last; bool flag=0; while(~scanf("%I64d",&n)) { flag=0; getchar(); cnt=kr=sp=0; ans=1; while(1) { c=getchar(); if(c == '\n')cnt++; if(cnt>=n || c==EOF)break; //{} if(c == '$') { kr=last=0; while(1) { c=getchar(); if(c == '\n'){cnt++;if(kr)last=1;continue;} if(c == ' ')kr++; //if(c != ' ' && c == '\n')conti if(c != ' ' && kr){if(ans>lim)flag=1;ans*=(kr+1);kr=0;} if(c == '$')break; } if(c != ' ' && kr){if(ans>lim)flag=1;ans*=(kr+1);kr=0;} //// } if(c == '{') { sp=0; while(1) { c=getchar(); if(c == '\n'){cnt++;} if(c == '|'){sp++;} if(c == '}')break; } if(ans>lim)flag=1; ans*=(sp+1); sp=0; } } if(ans>lim||flag)printf("doge\n"); else printf("%I64d\n",ans); } return 0; }
hdu 4891---水题 但是WA了很多次,布布扣,bubuko.com
原文地址:http://blog.csdn.net/u011026968/article/details/38277059