- FJNU·ACM-23级新手村の国庆消消乐A(重现赛)
题A#基于现实时间的计算方法(方法极度脑残,慎入)
- 2023-10-1 17:01:23 @
背景: 我们知道,一天由0点开始,24点结束,这是不变的规律。所以在题目基于现实的背景下,无论测试点怎么变化,这个规律都是适用的。
在这样的背景下,我们不难发现,直接把题给测试点套入现实时间进行计算,实际上是可行的。
于是就有了以下十分无脑的代码(
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
public class Main {
private static final PrintWriter out = new PrintWriter(System.out);
private static final Scanner scanner = new Scanner();
public static void main(String[] args) {
//程序入口
solve();
out.flush();
}
public static void solve() {
//记录题目所给三个时间点的数据
final int startHour = scanner.nextInt(), startMinute = scanner.nextInt(), endHour = scanner.nextInt(), endMinute = scanner.nextInt(), meituanH = scanner.nextInt(), meituanM = scanner.nextInt();
//创建日期转换器
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//用简单的计算算出8小时对应的毫秒数
final long target = 28800000;
try {
//把三个时间点套入现实时间中获取Date对象
final Date date0 = sdf.parse("2023-10-01 00:00"), date1 = sdf.parse("2023-10-01 " + startHour + ":" + startMinute ), date2 = sdf.parse("2023-10-01 " + endHour + ":" + endMinute), date3 = sdf.parse("2023-10-01 " + meituanH + ":" + meituanM);
//把Date转换为相应的时间戳
final long d0 = date0.getTime(), d1 = date1.getTime(), d2 = date2.getTime(), d3 = date3.getTime();
//计算出从比赛结束到点外卖过了多久
long left = d3 - d2;
//如果已经过了八小时直接输出比赛开始的时刻(最迟时刻)
if (left >= target) {
out.println("sleep");
out.println(startHour + " " + startMinute);
return;
}
//计算出比赛前还要睡多久,以及比赛开始时间减去这个长度的时间得到的相应日期的时间戳
long require = target - left, newD = d1 - require;
//如果开始睡觉的时间戳小于今天开始的时间戳(0点),则无法睡够8小时
if (newD < d0) {
out.println("ipmama");
return;
}
//够八小时,将相应日期的时间戳转换为Date对象后去掉头部("2023-10-01 ")和去掉开头多余的0然后输出
out.println("sleep");
String[] s = sdf.format(new Date(newD)).substring(11).split(":");
if (s[0].startsWith("0")) s[0] = s[0].substring(1);
if (s[1].startsWith("0")) s[1] = s[1].substring(1);
out.println(s[0] + " " + s[1]);
} catch (ParseException ignored) {}
}
private static class Scanner {
private StringTokenizer st;
private final BufferedReader br;
public Scanner() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
(怎么会有人想得出这么弱智的解法啊喂((()
1 条评论
-
明陌coper LV 6 @ 2023-10-1 17:16:08
%%%
- 1