HDU1861-游船出租-浙大计算机研究生复试上机考试-2007年

时间:2022-12-18 12:11:36

           这是一道水题,看到网上很多用字典树写的,个人觉得只要用map记录一下就好了,本题主要的坑点有以下三个:

           1、数据读取有一点麻烦,要注意一下读取中间字符,不要读出空格;

           2、经测试,本题没有加每一天的游船记录 visit 的刷新(也就是两天之间 的visit数据不更新也能A,2333表示不是很懂数据),而且不存在在游船还没还回来就又重新出发的数据,这两个可以不加约束,但是作为一名严谨的程序员,我感觉还是加上比较好;

           3、博主遇到的坑,一开始偷懒为了避免读取字符,于是读取一个长度为1的字符串数组,导致WA了n发。。。最后发现,数组不能开成长度为1,长度为1的字符串数组表示长度不确定,在读取的时候容易出错,算是越界错误的一种,还真是活久见。。。所以,数组还是要开大一些,要经常打代码,熟悉这些坑,吃一堑长一智。

           AC代码如下,表示水题WA得好心疼:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
pair<int, int> s[110];
int main()
{
int n, hh, mm;
char s0[10];//长度不能设为1!
int cnt = 0;
double t = 0;
for(int i = 1; i <= 100; i++)
s[i] = make_pair(100, 100);
while(~scanf("%d", &n) && n != -1)
{
scanf("%s %d:%d", s0, &hh, &mm);
if(n == 0)
{
printf("%d %.lf\n", cnt, (cnt == 0)?0:(t/cnt));
cnt = 0, t = 0;
for(int i = 1; i <= 100; i++)
s[i] = make_pair(100, 100);
continue;
}
if(s0[0] == 'S' && s[n].first == 100 && s[n].second == 100)
{
s[n] = make_pair(hh, mm);
}
else if(s[n].first != 100 && s[n].second != 100 && s0[0] == 'E')
{
cnt++;
t = t+(hh-s[n].first)*60+mm-s[n].second;
s[n] = make_pair(100, 100);
}
}
return 0;
}