浙江大学ACM俱乐部 2091:游船出租

这道题看似简单,但是有两点要注意:


一、取平均数四舍五入取整。
       

      方法是:除出来的小数+0.5,然后强制类型转换成int,这样就行了。这是从图形学里面的DDA算法得来的思想。


二、关于题意的理解
       当同一条船有很多‘S’的登记记录,只有一个‘E’的记录时,这时候按理说现在只能算出最后一个‘S’登记和“E”结束时的这个时间段,不能拿最开始的‘S’来计算。。。。。但是参照代码就是这样写的,很是郁闷。。。WA了半个小时。。


AC代码,不是最优的,代码编程上还可以优化很多。
 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int boat[101][2];
int hour2minute(char time[]){
	int minute;
	char*q;
	char* p=strtok(time,":");
	q=p;
	p=strtok(NULL,":");
	minute=atoi(q)*60+atoi(p);
	return minute;
}
int main(){
	int i,j,k,count,t;
	char ch;
	char time[6];
	while(scanf("%d",&i)!=EOF){
		if(i==-1) break;
		getchar();
		scanf("%c %s",&ch,time);
		for(k=0;k<101;k++)
			for(j=0;j<2;j++)
				boat[k][j]=0;
		count=t=0;
		while(i!=0){
			if(ch=='S')
			{
				if(boat[i][1]==0){
					boat[i][0]=-hour2minute(time);
					boat[i][1]=1;
				}
			}
			else
			{
				if(boat[i][1]==1)
				{
					boat[i][0]+=hour2minute(time);
					count++;
					t+=boat[i][0];
					boat[i][0]=0;
					boat[i][1]=0;
				}
			}
			scanf("%d %c %s",&i,&ch,time);
		}
		if(count!=0){ 
			i=t*1.0/count+0.5;
			printf("%d %d\n",count,i);
		}
		else printf("0 0\n");
		
	}
}

同一条船,按照第一个‘S’和第一‘E’还是可以理解的,因为既然有多个‘S’,只有一个‘E’,或者有多个‘E’,只有一个‘S’,都不能判断那唯一一个是与谁对应的。

 上面那一句打错特错了。   肯定可以知道是与最近的有关的,因为整体记录是按照时间顺序记录的。如果第一次不还回船的话,就不会有第二次租同一条船。

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值