背景: 我们知道,一天由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 条评论

  • 1