P7075 [CSP-S2020] 儒略日(内附封面)

news2024/11/25 23:28:32

[CSP-S2020] 儒略日

题目描述

为了简便计算,天文学家们使用儒略日(Julian day)来表达时间。所谓儒略日,其定义为从公元前 4713 年 1 月 1 日正午 12 点到此后某一时刻间所经过的天数,不满一天者用小数表达。若利用这一天文学历法,则每一个时刻都将被均匀的映射到数轴上,从而得以很方便的计算它们的差值。

现在,给定一个不含小数部分的儒略日,请你帮忙计算出该儒略日(一定是某一天的中午 12 点)所对应的公历日期。

我们现行的公历为格里高利历(Gregorian calendar),它是在公元 1582 年由教皇格里高利十三世在原有的儒略历(Julian calendar)的基础上修改得到的(注:儒略历与儒略日并无直接关系)。具体而言,现行的公历日期按照以下规则计算:

  1. 公元 1582 年 10 月 15 日(含)以后:适用格里高利历,每年一月 31 31 31 天、 二月 28 28 28 天或 29 29 29 天、三月 31 31 31 天、四月 30 30 30 天、五月 31 31 31 天、六月 30 30 30 天、七月 31 31 31 天、八月 31 31 31 天、九月 30 30 30 天、十月 31 31 31 天、十一月 30 30 30 天、十二月 31 31 31 天。其中,闰年的二月为 29 29 29 天,平年为 28 28 28 天。当年份是 400 400 400 的倍数,或日期年份是 4 4 4 的倍数但不是 100 100 100 的倍数时,该年为闰年。
  2. 公元 1582 年 10 月 5 日(含)至 10 月 14 日(含):不存在,这些日期被删除,该年 10 月 4 日之后为 10 月 15 日。
  3. 公元 1582 年 10 月 4 日(含)以前:适用儒略历,每月天数与格里高利历相同,但只要年份是 4 4 4 的倍数就是闰年。
  4. 尽管儒略历于公元前 45 年才开始实行,且初期经过若干次调整,但今天人类习惯于按照儒略历最终的规则反推一切 1582 年 10 月 4 日之前的时间。注意,公元零年并不存在,即公元前 1 年的下一年是公元 1 年。因此公元前 1 年、前 5 年、前 9 年、前 13 年……以此类推的年份应视为闰年。

输入格式

第一行一个整数 Q Q Q,表示询问的组数。
接下来 Q Q Q 行,每行一个非负整数 r i r_i ri,表示一个儒略日。

输出格式

对于每一个儒略日 r i r_i ri,输出一行表示日期的字符串 s i s_i si。共计 Q Q Q 行。 s i s_i si 的格式如下:

  1. 若年份为公元后,输出格式为 Day Month Year。其中日(Day)、月(Month)、年(Year)均不含前导零,中间用一个空格隔开。例如:公元
    2020 年 11 月 7 日正午 12 点,输出为 7 11 2020
  2. 若年份为公元前,输出格式为 Day Month Year BC。其中年(Year)输出该年份的数值,其余与公元后相同。例如:公元前 841 年 2 月 1 日正午 12
    点,输出为 1 2 841 BC

样例 #1

样例输入 #1

3
10
100
1000

样例输出 #1

11 1 4713 BC
10 4 4713 BC
27 9 4711 BC

样例 #2

样例输入 #2

3
2000000
3000000
4000000

样例输出 #2

14 9 763
15 8 3501
12 7 6239

样例 #3

样例输入 #3

见附件中的 julian/julian3.in

样例输出 #3

见附件中的 julian/julian3.ans

提示

【数据范围】

测试点编号 Q = Q = Q= r i ≤ r_i \le ri
1 1 1 1000 1000 1000 365 365 365
2 2 2 1000 1000 1000 1 0 4 10^4 104
3 3 3 1000 1000 1000 1 0 5 10^5 105
4 4 4 10000 10000 10000 3 × 1 0 5 3\times 10^5 3×105
5 5 5 10000 10000 10000 2.5 × 1 0 6 2.5\times 10^6 2.5×106
6 6 6 1 0 5 10^5 105 2.5 × 1 0 6 2.5\times 10^6 2.5×106
7 7 7 1 0 5 10^5 105 5 × 1 0 6 5\times 10^6 5×106
8 8 8 1 0 5 10^5 105 1 0 7 10^7 107
9 9 9 1 0 5 10^5 105 1 0 9 10^9 109
10 10 10 1 0 5 10^5 105年份答案不超过 1 0 9 10^9 109

吐槽:自己做的时候按天数枚举居然还枚举错了,荣获20分

大致思路

在一种历法中,日期计算以400年为周期,每400年都有恰好146097天

预处理出400年内的情况,将年份模400即可快速得到答案

判断历法: r ⩽ 2299160 r\leqslant2299160 r2299160即为儒略历(敲计算器或者自己打个模拟)

对于格里高利历,以1200年1月1日为起始日,rr减去跳过的天数(2159351)

#include<bits/stdc++.h>
#define int long long int
const int N=1e6+114514;
int mm=146097;
int T,y[N],m[N],d[N];
int n,t;
inline int md(int y,int m){
    if(m==2)return y%4?28:y%100?29:y%400?28:29;//判断闰年
    return m==4||m==6||m==9||m==11?30:31;
}
signed main(){
    m[0]=d[0]=1;
    for(int i=1;i<mm;++i){
        d[i]=d[i-1]+1;m[i]=m[i-1];y[i]=y[i-1];//打表400年
        if(d[i]>md(y[i],m[i]))++m[i],d[i]=1;
        if(m[i]>12)++y[i],m[i]=1;
    }
    scanf("%lld",&T);
    while(T--){
        scanf("%lld",&n);
        if(n>2299160){
            n-=2159351;
            t=n/mm*400+1200;
            n%=mm;
        }else{
            t=n/1461*4-4712;
            n%=1461;
        }
        if(t+y[n]>0)printf("%lld %lld %lld\n",d[n],m[n],t+y[n]);
        else printf("%lld %lld %lld BC\n",d[n],m[n],1-t-y[n]);
    }
}

封面:樱花萌放

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

得帆信息副总裁——陈明:低代码企业内部推广场景建议

在之前的文章中有介绍过#企业内部如何做低代码的运营推广&#xff08;☜点击回顾精彩&#xff09;&#xff0c;感兴趣的可以结合之前的文章进行了解。 结合本人这几年的低代码落地推广经验&#xff0c;不论是由得帆主导的低代码平台运营推广&#xff0c;还是由客户自身主导进行…

广通优云完成2亿元C轮融资,加速平台级运维产品的技术创新

广通优云于近期完成2亿元C轮融资&#xff0c;松禾资本领投&#xff0c;朗玛峰创投、奇安投资、舜宇投资、天雅资本等机构跟投&#xff0c;皓石资本担任本轮独家财务顾问。资金将主要应用于公司产品创新研发、团队人才建设及市场生态开拓等方面。 在当前资本市场遇冷的背景下&a…

RSS阅读器

focus&#xff1a;免费、无广告、已停止维护[2020]、开源 也许后面我会维护更新。 Archive: https://www.ihewro.com/archives/948/ 开源代码&#xff1a;https://github.com/ihewro/Focus &#x1f370;借助RSShub开源项目&#xff0c;自带丰富订阅市场&#xff0c;尽可能简…

【大数据之Kafka】十四、Kafka-Eagle监控

Kafka-Eagle 框架可以监控Kafka 集群的整体运行情况&#xff0c;在生产环境中经常使用。 1 MySQL环境准备 https://blog.csdn.net/qq_18625571/article/details/130613704?spm1001.2014.3001.5501 2 Kafka环境准备 &#xff08;1&#xff09;关闭Kafka集群。 kf.sh stop&…

反向动力学Ik学习

参考文章&#xff1a;&#xff08;非本人原创&#xff09; 英文原文&#xff1a;Inverse Kinematics Techniques in Computer Graphics: A Survey (andreasaristidou.com) 知乎翻译文章&#xff1a; 【游戏开发】逆向运动学&#xff08;IK&#xff09;详解 - 知乎 (zhihu.co…

django创建web服务器

安装 pip install django 创建项目 django-admin startproject report django-admin startapp data //project下可创建多个app 执行使用 python manage.py migrate //orm代码到数据库 python manage.py runserver 0.0.0.0:80 权限管理 python manage.py createsuperuser 创建…

住宅区电力系统管理,这一点很重要!

随着现代社会对电力供应的不断增长需求&#xff0c;住宅小区的电力分配系统变得越来越复杂。电力是我们日常生活中不可或缺的一部分&#xff0c;因此确保小区的电力供应安全和稳定至关重要。 配电柜监控是确保电力系统安全和稳定运行的重要工具。它可以提高电力供应的可靠性&am…

掌动智能浅谈UI自动化测试工具的重要性

在现代软件开发中&#xff0c;用户界面(UI)的质量和可靠性对于一个应用的成功至关重要。为了确保应用在各种环境和设备上都能正常运行&#xff0c;开发团队需要进行全面的UI测试。为了提高测试效率和减少人为错误&#xff0c;UI自动化测试工具成为不可或缺的工具。本文将探讨UI…

Redis缓存实现及其常见问题解决方案

随着互联网技术的发展&#xff0c;数据处理的速度和效率成为了衡量一个系统性能的重要指标。在众多的数据处理技术中&#xff0c;缓存技术以其出色的性能优化效果&#xff0c;成为了不可或缺的一环。而在众多的缓存技术中&#xff0c;Redis 以其出色的性能和丰富的功能&#xf…

安卓系统--翻译手机rom语言 添加多国语言 编译apk 反编译ODEX 工具步骤解析

很多小品牌机型不具备多语言设置。国内大都是中文。要想换为其他语言除非固件支持。例如国际版固件等等。大厂基本都有中文或者英文或者其他语言配置。而小品牌机型只能通过修改rom来达到多语言调用. 工具步骤演示 今天给友友介绍一款工具&#xff0c;可以用来翻译手机rom语言…

Android Studio 打不开

现象&#xff1a;点击PC端上Android Studio 图标&#xff0c;没有反应&#xff0c;AS没有打开 环境&#xff1a;windows 11 解决办法&#xff1a; 1、找到任务管理器 2、发现后台进程中&#xff0c;有Android Studio 3、结束该任务。 4、再此点击Android Studio 图标&…

阿里系常用代码规范及工具

1. 前言 1.1 为什么需要代码规范 可能有同学觉得代码需要突出个人的特点&#xff0c;需要特异化&#xff0c;但是这样就会造成别人阅读起来很困难 代码不仅仅是交给机器来执行的&#xff0c;同时代码也是让其他同事来阅读的&#xff0c;如果代码不规范就会出现各种各样的问题&…

vscode:连接服务器进行远程开发调试

以下推荐一个使用远端服务器开发调试的方法&#xff0c;可以让我们像在本地编写调试程序一样简单&#xff1a;使用vscode vscode-remote插件 一、安装SSH 1.windows自带的openssh经测试不可用&#xff0c;建议先安装git&#xff0c;使用git中自带的ssh&#xff0c;方法如下&a…

【STL容器】list

文章目录 一、list定义二、list的迭代器三、list的元素操作四&#xff0c;list的优缺点 一、list定义 list本质是一个双向带头循环链表 template<class T> struct list_node {list_node* prev;T val;list_node* next; };template<class T> class list {typedef lis…

Redis性能压测、监控工具及优化方案

Redis是一款高性能的开源缓存数据库&#xff0c;但是在实际应用中&#xff0c;我们需要对Redis进行性能压测、监控以及优化&#xff0c;以确保其稳定性和高可用性。本文将介绍Redis性能压测、监控工具及优化方案。 01 Redis性能压测 常用的Redis性能压测工具有&#xff1a; …

探秘移动端BI:发展历程与应用前景解析

什么是移动端BI 维基百科 上对于 移动端商业智能的定义是这样的 > Mobile BI is a system that presents historical and real-time information on mobile devices for effective decision-making and management support. It enables analysis on smartphones and table…

DLT645-2007智能电表通讯规约 协议读取数据实战

【本文发布于https://blog.csdn.net/Stack_/article/details/132946097&#xff0c;未经许可不得转载&#xff0c;转载须注明出处】 协议文档&#xff1a;DL-T 645-2007 多功能电能表通信协议 先用电表厂家提供的上位机进行通讯并拦截数据&#xff0c;再对照协议文档进行以下分…

springcloud3 分布式事务解决方案seata之AT模式5

一 seata的AT模式 1.1 AT模式与XA模式 XA模式一阶段不提交事务&#xff0c;锁定资源&#xff1b;AT模式一阶段直接提交&#xff0c;不锁定资源。 XA模式依赖数据库机制实现回滚&#xff1b;AT模式利用数据快照实现数据回滚。 XA模式强一致&#xff1b;AT模式最终一致 1.2 …

python虚拟环境(venv)

一、什么是python环境 首先要知道什么是python环境&#xff1f; Python环境主要包括以下内容&#xff1a; 解释器 python.exe (python interpreter&#xff0c;使用的哪个解释看环境配置) Lib目录 标准库 第三方库&#xff1a;site-pakages目录&#xff0c;默认安装第三方…

【内网穿透】公网远程访问本地硬盘文件

公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件3. 设定http服务器端口4. 进入cpolar的设置5. 生成公网连到本地内网穿透数据隧道 总结 前言 随着云概念的流行&#xff0c;不少企业采用云存储技术来保…