CF698E Cron
题目描述
有时,经典的解决方案不够强大,我们必须自己设计。为了解决这个问题,你必须实现任务调度系统的一部分。
每个任务都应在某些特定时刻执行。在我们的系统中,您可以为任务的执行时间设置精确的秒、分、小时、星期、日、月值。此外,您还可以设置一个特殊值 $-1$,表示该参数的任何值都有效。
例如,如果参数字符串为 `-1 59 23 -1 -1 -1`,则问题将在每天的 $23:59:00$、$23:59:01$、$23:59:02$、...、$23:59:59$ 执行(共执行 $60$ 次)。
秒、分和小时从 $0$ 开始编号,而日、月和星期则从 $1$ 开始编号。一周的第一天是星期一。
有一种特殊情况需要单独处理。如果同时给出星期和日期(即与 $-1$ 不同),则执行任务时这两个参数中至少有一个应与当前时间匹配(如果两个都匹配也可以,当然,所有其他参数也应匹配)。例如,参数字符串 `0 0 12 6 3 7` 表示任务将在 $2016$ 年 $7$ 月 $2$ 日(星期六)和 $2016$ 年 $7$ 月 $3$ 日(星期日)中午执行。
我们不应忘记闰年的存在。如果数字能被 $400$ 整除,或者不能被 $100$ 整除,但能被 $4$ 整除,那么这一年就是闰年。每个闰年有 $366$ 天,而不是通常的 $365$ 天,因为二月延长到 $29$ 天,而不是通常的 $28$ 天。
当前时间表示 $1970$ 年 $1$ 月 $1$ 日(星期四)$00:00:00$ 之后经过的秒数。
您将得到由六个参数组成的字符串,用于描述任务执行的时间点。您还会得到若干个时间点。您必须为每个时刻找到第一个严格大于当前时刻的时间点,以便执行任务。
输入格式
输入的第一行包含六个整数 $s,m,h,day,date$ 和 $month(0\le s,m\le59,0\le h\le23,1\le day\le7,1\le date\le31,1\le month\le12)$。每个数字也可以等于 $-1$。可以保证的是,有无穷多的时刻应该执行这个任务。
下一行包含唯一的整数 $n(1\le n\le1000)$ —— 你必须解决问题的时刻数。接下来的 $n$ 行都包含一个整数 $t_{i}(0\le t_{i}\le 10^{12})$.
输出格式
打印 $n$ 行,其中第 $i$ 行应包含严格大于 $t_{i}$ 的第一个时间点,此时任务应被执行。
说明/提示
$1970$ 年 $1$ 月 $1$ 日午夜之后的 $1467372658$ 时刻是 $2016$ 年 $7$ 月 $1$ 日 $11$ 时 $30$ 分 $58$ 秒。
翻译 @[\_Sunmoon\_](https://www.luogu.com.cn/user/394167)