时间区间计算模拟,以前做过几次,但都没这题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();
}
}