【模拟】时间计算

第1题  时间计算(heaven.pas/exe)

 

【问题描述】

有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒。我犹豫了。天上一日,人间一年啊!当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我希望选一个最长的空闲时间段,使我在天上待的时间尽量长。记住,今年是4000年。天上一天也是24小时,每小时60分,每分60秒。

 

【输入数据】

输入文件的第一行是一个非负整数 N,表示4000年中必须呆在人间的天数,以下共N行,每行两个用空格隔开的正整数,即日期(月,日),输入文件保证无错误,日期无重复。

 

【输出数据】

输出文件仅有一行包含一个非负整数,即在天上的时间(四舍五入精确到秒)。
 

【样例输入】heaven.in

2
3 8
12 2

 

【样例输出】heaven.out

63266


模拟题。要细心,这种题不能丢分,但是貌似只有我和两个高二的没丢分。


#include <cstdio>
#include <string>
#include <algorithm>
using std::sort;

const long day[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
const long aday = 86400;

long calc(long m,long d)
{
	long rs = 0;
	for (long i=1;i<m;i++)
	{
		rs += day[i];
	}
	rs += d;
	return rs;
}

long getint()
{
	long rs=0;
	bool sgn=1;
	char tmp;
	do tmp=getchar();
	while (!isdigit(tmp)&&tmp-'-');
	if (tmp=='-'){tmp=getchar();sgn=0;}
	do rs=(rs<<3)+(rs<<1)+tmp-'0';
	while (isdigit(tmp=getchar()));
	return sgn?rs:-rs;
}

struct OFF
{
	long m;
	long d;
	bool operator<(const OFF& off2)const 
	{
		if (m == off2.m)
			return d<off2.d;
		return m<off2.m;
	}
};
OFF off[400];

int main()
{
	freopen("heaven.in","r",stdin);
	freopen("heaven.out","w",stdout);
	long n = getint();
	if (n == 0)
	{
		printf("%ld",aday);
		return 0;
	}
	for (long i=1;i<n+1;i++)
	{
		off[i].m = getint();
		off[i].d = getint();
	}
	off[0].m = 1;
	off[0].d = 0;
	sort(off+1,off+1+n);
	n ++;
	off[n].m = 12;
	off[n].d = 32;
	
	long ans = 0;

	for (long i=1;i<n+1;i++)
	{
		long b = calc(off[i].m,off[i].d);
		long a = calc(off[i-1].m,off[i-1].d);

		if (ans < b-a-1)
		{
			ans = b-a-1;
		}
	}
	printf("%.0lf",ans*aday/366.0);

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值