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

本文分享了一道关于游船使用记录统计的编程题解答经验,重点介绍了在实现过程中遇到的几个常见陷阱,如数据读取注意事项、游船记录刷新问题及数组长度设定等,并附上了AC代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           这是一道水题,看到网上很多用字典树写的,个人觉得只要用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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值