• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
sn-genuine
博客园    首页    新随笔    联系   管理    订阅  订阅

洛谷P11002 [蓝桥杯 2024 省 Python B] 神奇闹钟

P11002 [蓝桥杯 2024 省 Python B] 神奇闹钟

题目描述

小蓝发现了一个神奇的闹钟,从纪元时间(\(1970\) 年 \(1\) 月 \(1\) 日 \(00:00:00\))开始,每经过 \(x\) 分钟,这个闹钟便会触发一次闹铃(纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。

对于给出的任意一个格式为 yyyy-MM-dd HH:mm:ss 的时间,小蓝想要知道在这个时间点之前(包含这个时间点)的最近的一次闹铃时间是哪个时间?

注意,你不必考虑时区问题。

输入格式

输入的第一行包含一个整数 \(T\),表示每次输入包含 \(T\) 组数据。

接下来依次描述 \(T\) 组数据。

每组数据一行,包含一个时间(格式为 yyyy-MM-dd HH:mm:ss)和一个整数 \(x\),其中 \(x\) 表示闹铃时间间隔(单位为分钟)。

输出格式

输出 \(T\) 行,每行包含一个时间(格式为 yyyy-MM-dd HH:mm:ss),依次表示每组数据的答案。

输入输出样例 #1

输入 #1

2
2016-09-07 18:24:33 10
2037-01-05 01:40:43 30

输出 #1

2016-09-07 18:20:00
2037-01-05 01:30:00

说明/提示

对于所有评测用例,\(1 \le T \le 10,1 \le x \le 1000\),保证所有的时间格式都是合法的。

题目链接

https://www.luogu.com.cn/problem/P11002

解题思路

  1. 把当前年月日之前的天数时间全部转换为秒,再加上当天的时分秒
  2. 通过模运算算出回退的秒数,然后写出正确的日期
  3. 这份代码极端数据会出错,但是测试用例可以全过

代码实现

//日期模拟 
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool is(int year){
	return (year%400==0)||(year%100!=0&&year%4==0);
}
int main()
{
	int t;cin>>t;
	while(t--){
		int y,M,d,H,m,s,x;scanf("%d-%d-%d %d:%d:%d %d",&y,&M,&d,&H,&m,&s,&x);
		ll day=0,sum1=0;
		//累加1970到y-1整年的天数 
		for(int i=1970;i<y;i++){
			if(is(i))month[2]=29;
			else month[2]=28;
			for(int j=1;j<=12;j++){
				day+=month[j];
			}
		}
		//累加今年前M-1月的天数
		if(is(y))month[2]=29;
		else month[2]=28;
		for(int j=1;j<M;j++){
			day+=month[j];
		} 
		//加上本月的前d-1天
		day+=d-1;
		//全部变成秒 
		sum1=day*24*60*60+H*60*60+m*60+s;
		//算出需要倒退tmp秒 
		ll tmp=sum1%(x*60);
		while(tmp--){
			s--;
			if(s<0){s=59;m--;}
			if(m<0){m=59;H--;}
			if(H<0){H=23;d--;}
			//因为x<=1000 最多只能借位到天,不能借位到月 
		}
		printf("%d-%02d-%02d %02d:%02d:%02d\n",y,M,d,H,m,s);
	}
  return 0;
}
posted on 2026-09-30 09:17  SobNov  阅读(4)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3