ZOJ-1263

41 篇文章 0 订阅
1 篇文章 0 订阅

时间区间计算模拟,以前做过几次,但都没这题BT,而且测试数据超多。。我用JAVA搞的,最后发现有些数据的输入和答案对不上,试着提交下竟然AC了。。在POJ提交WA,暂时看不出来啥问题,MARK一下以后有空回头看看吧。。懒的在这种繁琐题上纠结了。。

import java.util.Calendar;
import java.util.Scanner;

public class Main
{
	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		int[] time1 = new int[6];
		int[] time2 = new int[6];
		while (sc.hasNextLine())
		{
			String line1 = sc.nextLine().trim();
			String line2 = sc.nextLine().trim();
			String line3 = sc.nextLine().trim();
			sc.nextLine();
			String ss[] = line3.split(" ");
			int num = Integer.valueOf(ss[0]);
			String unit = ss[1];

			ss = line1.split(" ");
			for (int i = 0; i < ss.length; i++)
				time1[i] = Integer.valueOf(ss[i]);
			ss = line2.split(" ");
			for (int i = 0; i < ss.length; i++)
				time2[i] = Integer.valueOf(ss[i]);

			long ans = 0;
			if (unit.equals("year"))
			{
				if (!(time1[1] == 1 && time1[2] == 1 && time1[3] == 0
						&& time1[4] == 0 && time1[5] == 0))
					time1[0]++;
				if (time2[0] >= time1[0])
					ans = (time2[0] - time1[0]) / num;
			}
			else if (unit.equals("month"))
			{
				int month1 = time1[0] * 12 + time1[1];
				int month2 = time2[0] * 12 + time2[1];
				if (!(time1[2] == 1 && time1[3] == 0 && time1[4] == 0 && time1[5] == 0))
					month1++;
				if (month2 > month1)
					ans = (month2 - month1) / num;
			}
			else
			{
				Calendar c1 = Calendar.getInstance();
				Calendar c2 = Calendar.getInstance();
				c1.set(time1[0], time1[1] - 1, time1[2], time1[3], time1[4],
						time1[5]);
				c2.set(time2[0], time2[1] - 1, time2[2], time2[3], time2[4],
						time2[5]);
				c1.set(Calendar.MILLISECOND, 0);
				c2.set(Calendar.MILLISECOND, 0);

				if (unit.equals("day"))
				{
					if (!(time1[3] == 0 && time1[4] == 0 && time1[5] == 0))
					{
						c1.add(Calendar.DATE, 1);
						c1.set(Calendar.HOUR_OF_DAY, 0);
						c1.set(Calendar.MINUTE, 0);
						c1.set(Calendar.SECOND, 0);
					}
					long l1 = c1.getTimeInMillis();
					long l2 = c2.getTimeInMillis();
					if (l2 >= l1)
						ans = (l2 - l1) / (num * 24 * 3600 * 1000L);
				}
				else if (unit.equals("hour"))
				{
					if (!(time1[4] == 0 && time1[5] == 0))
					{
						c1.add(Calendar.HOUR_OF_DAY, 1);
						c1.set(Calendar.MINUTE, 0);
						c1.set(Calendar.SECOND, 0);
					}
					long l1 = c1.getTimeInMillis();
					long l2 = c2.getTimeInMillis();
					if (l2 >= l1)
						ans = (l2 - l1) / (num * 3600 * 1000L);
				}
				else if (unit.equals("minute"))
				{
					if (!(time1[5] == 0))
					{
						c1.add(Calendar.MINUTE, 1);
						c1.set(Calendar.SECOND, 0);
					}
					long l1 = c1.getTimeInMillis();
					long l2 = c2.getTimeInMillis();
					if (l2 >= l1)
						ans = (l2 - l1) / (num * 60 * 1000L);
				}
				else
				{
					long l1 = c1.getTimeInMillis();
					long l2 = c2.getTimeInMillis();
					if (l2 >= l1)
						ans = (l2 - l1) / (num * 1000L);
				}
			}
			System.out.println(ans);
		}
		sc.close();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值