标签:模拟
9 I‘ll shoot the magic arrow several times on the ground, and of course the arrow will leave some holes on the ground. When you connect three holes with three line segments, you may get a triangle. {|It is hole! Common sense!| No Response, Read Problem Statement|don‘t you know what a triangle is?} 1 Case $1: = >$ 5 $/*This is my code printed in proportional font, isn‘t it cool?*/ printf("Definitely it is cooooooool %d\n",4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4 * 4);$ 2 $Two space$ and {blue| red} color!
4 4 doge 6
题意:
题目给你n行文章,有两种情况,如下:
1.对于{A|B|C|D|...},读出竖线的数量 x ,值为 x + 1
2.对于$blah blah$,读出每小段连续的空格数y1、y2...,值为(y1 + 1) * (y2 + 1) * ....
将以上求得的所有值相乘即可。
思路:
模拟一遍即可。
注意点:
1.注意数据相乘的积可能会超出int32位,甚至是long long的64位。如下样例:
1
$ a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a$一行共有63个空,就会爆 long long。
解决方案是当超出 10^5 时,将值改为 10^5 + 1 ,并且不再处理字符串,详见代码。
/************************************************************************* > File Name: 1005.cpp > Author: Bslin > Mail: Baoshenglin1994@gmail.com > Created Time: 2014年07月29日 星期二 16时42分00秒 ************************************************************************/ #include <cstdio> #include <string.h> using namespace std; #define N 3050000 char str[N]; int main(int argc, char *argv[]) { freopen("in.txt", "r", stdin); int n, len, i, j, flagk, flag$, doge; long long space, ans, tmp1, tmp2; char nowk; while(scanf("%d", &n) != EOF) { ans = 1; tmp1 = 1; // 竖杠数 tmp2 = 1; // 每段$$中的空格总乘积 space = 1; // 每小段空格数 flagk = flag$ = 0; // 是否有"{"或"$" doge = 0; getchar(); for (i = 0; i < n; ++i) { gets(str); len = strlen(str); if(doge) continue; for (j = 0; j < len; ++j) { if(str[j] == '{') { flagk = 1; } else if(str[j] == '}') { ans = ans * tmp1; tmp1 = 1; flagk = 0; } else if(str[j] == '$') { if(flag$ == 0) { flag$ = 1; } else { if(nowk == ' ') { tmp2 = tmp2 * space; if(tmp2 > 100000) tmp2 = 100001; ///// } ans = ans * tmp2; tmp2 = 1; space = 1; flag$ = 0; } } else { if(flagk) { if(str[j] == '|') { tmp1 ++; } } if(flag$) { if(str[j] == ' ') { space ++; } else { tmp2 = tmp2 * space; if(tmp2 > 100000) tmp2 = 100001; ///// space = 1; } } } if(ans > 100000) doge = 1; nowk = str[j]; } } if(doge) { printf("doge\n"); } else { printf("%I64d\n", ans); } } return 0; }
HDU 4891 The Great Pan (模拟),布布扣,bubuko.com
标签:模拟
原文地址:http://blog.csdn.net/u012150279/article/details/38280441