description

luogu

loj(暂无数据)

solution

这道题作为T1,对选手们仔细看清题目的好习惯,以及不为2h调试、5k代码而心态爆炸的重要能力进行了较好的锻炼,

特别准备的只有答案满足\(\le 10^9\)更是让每个同学从此对考场时要仔细看数据范围印象深刻。

实在是出题人良心的馈赠,将为每位选手的oi之路上平添一份助力。

没什么可说的,大力分类讨论+模拟

貌似二分写法会简单很多,不过5k代码丝毫不虚

在此,向该题的出题人表示最诚挚的问候和衷心的祝愿。

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read(){
ll x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
ll q,r;
int mo_ping[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int mo_run[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int sum_ping[13],sum_run[13];
inline void calcBC(ll r){
ll zq=366+365+365+365;
ll t=r/zq,p=r%zq;
ll y,m,d;
y=4713-t*4;
if(p>=366+365+365) p-=366+365+365,y-=3;
else if(p>=366+365) p-=366+365,y-=2;
else if(p>=366) p-=366,y-=1;
if(y%4==1){
for(int i=1;i<=12;++i)
if(sum_run[i]>p){m=i;p-=sum_run[i-1];break;}
d=p+1;
}
else{
for(int i=1;i<=12;++i)
if(sum_ping[i]>p){m=i;p-=sum_ping[i-1];break;}
d=p+1;
}
printf("%lld %lld %lld BC\n",d,m,y);
return ;
}
inline void calcjulian(ll r){
ll zq=366+365+365+365;
ll t=r/zq,p=r%zq;
ll y,m,d;
y=4*t+1;
if(p>=365+365+365) p-=365+365+365,y+=3;
else if(p>=365+365) p-=365+365,y+=2;
else if(p>=365) p-=365,y+=1;
if(y%4==0){
for(int i=1;i<=12;++i)
if(sum_run[i]>p){m=i;p-=sum_run[i-1];break;}
d=p+1;
}
else{
for(int i=1;i<=12;++i)
if(sum_ping[i]>p){m=i;p-=sum_ping[i-1];break;}
d=p+1;
}
printf("%lld %lld %lld\n",d,m,y);
return ;
}
inline void calc1582(ll r){
ll y,m,d;
y=1582;
if(r<17) m=10,d=r+15;
else if(r<47) m=11,d=r-16;
else m=12,d=r-46;
printf("%lld %lld %lld\n",d,m,y);
return ;
}
inline void calcbef1600(ll r){
ll y,m,d;
for(int i=1583;i<=1599;++i){
ll ty=i%4?365:366;
if(r<ty){
y=i;
if(y%4==0){
for(int i=1;i<=12;++i)
if(sum_run[i]>r){m=i;r-=sum_run[i-1];break;}
d=r+1;
}
else{
for(int i=1;i<=12;++i)
if(sum_ping[i]>r){m=i;r-=sum_ping[i-1];break;}
d=r+1;
}
break;
}
r-=ty;
}
printf("%lld %lld %lld\n",d,m,y);
return ;
}
int main(){
freopen("julian.in","r",stdin);
freopen("julian.out","w",stdout);
q=read();
for(int i=1;i<=12;++i) sum_ping[i]=sum_ping[i-1]+mo_ping[i],sum_run[i]=sum_run[i-1]+mo_run[i];
ll zq=366+365+365+365;
ll r1=zq*1178; //\xb9\xabԪǰ1\xc4\xea1\xd4\xc21\xc8\xd5
ll r2=r1+366; //\xb9\xabԪ1\xc4\xea1\xd4\xc21\xc8\xd5
ll r3=r2+zq*395+365+sum_ping[9]+3;//\xb9\xabԪ1582\xc4\xea10\xd4\xc24\xc8\xd5
ll r4=r3+1; //\xb9\xabԪ1582\xc4\xea10\xd4\xc215\xc8\xd5
while(q--){
r=read();
if(r<r2) calcBC(r);
else if(r<=r3) calcjulian(r-r2);
else{
r-=r4;
if(r<78) calc1582(r);
else{
ll y,m,d;
r-=78;
ll r5=4*366+13*365;
if(r<r5) calcbef1600(r);
else{
r-=r5;
ll bigzq=97*366+303*365,r6=25*366+75*365,r7=r6*2-1,r8=r6*3-2;
ll t=r/bigzq,p=r%bigzq,zq=366+365*3;
y=1600+t*400;
if(p<r6){
y+=(p/zq)*4;p%=zq;
if(p>=366+365+365) p-=366+365+365,y+=3;
else if(p>=366+365) p-=366+365,y+=2;
else if(p>=366) p-=366,y+=1;
if(y%4==0){
for(int i=1;i<=12;++i)
if(sum_run[i]>p){m=i;p-=sum_run[i-1];break;}
d=p+1;
}
else{
for(int i=1;i<=12;++i)
if(sum_ping[i]>p){m=i;p-=sum_ping[i-1];break;}
d=p+1;
}
printf("%lld %lld %lld\n",d,m,y);
continue;
}
else if(p<r7){
p-=r6;y+=100;
if(p>=365&&p<365+365) p-=365,y++;
else if(p>=365+365&&p<365*3) p-=365*2,y+=2;
else if(p>=365*3&&p<365*4) p-=365*3,y+=3;
else if(p>=365*4){
y+=4;
p-=365*4;
y+=(p/zq)*4;p%=zq;
if(p>=366+365+365) p-=366+365+365,y+=3;
else if(p>=366+365) p-=366+365,y+=2;
else if(p>=366) p-=366,y+=1;
}
if(y%4==0&&y%100!=0){
for(int i=1;i<=12;++i)
if(sum_run[i]>p){m=i;p-=sum_run[i-1];break;}
d=p+1;
}
else{
for(int i=1;i<=12;++i)
if(sum_ping[i]>p){m=i;p-=sum_ping[i-1];break;}
d=p+1;
}
printf("%lld %lld %lld\n",d,m,y);
continue;
}
else if(p<r8){
p-=r7;y+=200;
if(p>=365&&p<365+365) p-=365,y++;
else if(p>=365+365&&p<365*3) p-=365*2,y+=2;
else if(p>=365*3&&p<365*4) p-=365*3,y+=3;
else if(p>=365*4){
y+=4;
p-=365*4;
y+=(p/zq)*4;p%=zq;
if(p>=366+365+365) p-=366+365+365,y+=3;
else if(p>=366+365) p-=366+365,y+=2;
else if(p>=366) p-=366,y+=1;
}
if(y%4==0&&y%100!=0){
for(int i=1;i<=12;++i)
if(sum_run[i]>p){m=i;p-=sum_run[i-1];break;}
d=p+1;
}
else{
for(int i=1;i<=12;++i)
if(sum_ping[i]>p){m=i;p-=sum_ping[i-1];break;}
d=p+1;
}
printf("%lld %lld %lld\n",d,m,y);
continue;
}
else{
p-=r8;y+=300;
if(p>=365&&p<365+365) p-=365,y++;
else if(p>=365+365&&p<365*3) p-=365*2,y+=2;
else if(p>=365*3&&p<365*4) p-=365*3,y+=3;
else if(p>=365*4){
y+=4;
p-=365*4;
y+=(p/zq)*4;p%=zq;
if(p>=366+365+365) p-=366+365+365,y+=3;
else if(p>=366+365) p-=366+365,y+=2;
else if(p>=366) p-=366,y+=1;
}
if(y%4==0&&y%100!=0){
for(int i=1;i<=12;++i)
if(sum_run[i]>p){m=i;p-=sum_run[i-1];break;}
d=p+1;
}
else{
for(int i=1;i<=12;++i)
if(sum_ping[i]>p){m=i;p-=sum_ping[i-1];break;}
d=p+1;
}
printf("%lld %lld %lld\n",d,m,y);
continue;
}
}
}
}
}
return 0;
}

「CSP-S 2020」儒略日的更多相关文章

  1. 「CSP」第一届提高组考后总结

    「CSP」第一届提高组考后总结 问题分析+反思 成绩 心态 考前心态 考时心态 考后心态 方法 心灵鸡汤... 在学习了三年之后,我们信竞迎来了初中最后一次大考,也是第一次 CSPCSPCSP 考试. ...

  2. 「NOIP 2020」微信步数(计数)

    「NOIP 2020」微信步数(Luogu P7116) 题意: 有一个 \(k\) 维场地,第 \(i\) 维宽为 \(w_i\),即第 \(i\) 维的合法坐标为 \(1, 2, \cdots, ...

  3. 深圳即将启动首届「全国人工智能大赛」:超过 500 万大奖 & 政府资助,潜信息你读懂了吗!

    人工智能加速“视频/视觉”发展,近期,深圳市即将迎来人工智能领域权威赛事之一——首届「全国人工智能大赛」(The First National Artificial Intelligence Chal ...

  4. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  5. 迄今为止最硬核的「Java8时间系统」设计原理与使用方法

    为了使本篇文章更容易让读者读懂,我特意写了上一篇<任何人都需要知道的「世界时间系统」构成原理,尤其开发人员>的科普文章.本文才是重点,绝对要读,走起! Java平台时间系统的设计方案 几乎 ...

  6. 「Netty实战 02」手把手教你实现自己的第一个 Netty 应用!新手也能搞懂!

    大家好,我是 「后端技术进阶」 作者,一个热爱技术的少年. 很多小伙伴搞不清楚为啥要学习 Netty ,今天这篇文章开始之前,简单说一下自己的看法: @ 目录 服务端 创建服务端 自定义服务端 Cha ...

  7. 「有数可据」选择IT行业的1000个理由!

    这你要我编 我也编不出一千个呀 现如今转行IT 还需要1000个理由吗? 不 不需要的 一个就好   10月初 CSDN博主「有数可据」 发布了 2020年10月国内程序员薪资情况 他本人是这样说的☟ ...

  8. 「每日一题」面试官问你对Promise的理解?可能是需要你能手动实现各个特性

    关注「松宝写代码」,精选好文,每日一题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目类 ...

  9. 「每日一题」有人上次在dy面试,面试官问我:vue数据绑定的实现原理。你说我该如何回答?

    关注「松宝写代码」,精选好文,每日一题 ​时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 来源:原创 一.前言 文章首发在「松宝写代码」 2020. ...

随机推荐

  1. Vue.js 3.0搭配.NET Core写一个牛B的文件上传组件

    在开发Web应用程序中,文件上传是经常用到的一个功能. 在Jquery时代,做上传功能,一般找jQuery插件就够了,很少有人去探究上传文件插件到底是怎么做的. 简单列一下我们要做的技术点和功能点 使 ...

  2. revel run报错 undefined: sys call.SIGUSR2"

    revel run报错,报错信息为 o Compilation Error (in ..\\..\\revel\\server_adapter_go.go:135): undefined: sysca ...

  3. SQL注入的一些学习

    -------------------------------------- 这是我之前发布到的其他的一个网址,这里的话我重新总结 可能分很多,我也不是很清楚,只是皮毛的研究了一下 1,sql按数据库 ...

  4. Luogu P4208 [JSOI2008]最小生成树计数

    题意 给定一个 \(n\) 个点 \(m\) 条边的图,求最小生成树的个数. \(\texttt{Data Range:}1\leq n\leq 100,1\leq m\leq 10^4\) 题解 一 ...

  5. .NET内存分析工具-dotMemory

    .NET内存分析工具-dotMemory 1.介绍 官网链接 引言 程序内存占用较大?内存溢出?需要分析生产环境程序怎么办? dotMemory 使您可以分析各种 .NET 和 .NET Core应用 ...

  6. 4G工业路由器的性能介绍和应用需求

    4G工业路由器可以实现数据的远程传输和设备控制功能,主要应用的场景包括智能电网.智能交通.智能家居.才智金融.工业自动化.公共安全.环境保护.数字化医疗等领域,特别是大数据或是视频传输等.那么4G工业 ...

  7. 正式班D23

    2020.11.05星期四 正式班D23 目录 12.3.3 HUP信号 12.3.3 HUP信号 在关闭终端时,终端会收到Linux HUP信号(hangup信号),关闭其所有子进程. 想让进程一直 ...

  8. 【Azure 环境】存储在Azure上的文件,使用IE/Edge时自动打开的问题,如何变为下载而非自动打开

    问题描述 存储,作为云服务最重要的一部分.当需要从云存储中下载文件时,时常面临一些格式的文件被浏览器自动打开而非下载,那如何来解决这个问题呢? 在Azure中,存储的服务有以下方式: Azure Bl ...

  9. MeterSphere开发者手册

    什么是 MeterSphere MeterSphere 是一站式的开源企业级持续测试平台, 涵盖测试跟踪.接口测试.性能测试. 团队协作等功能,兼容 JMeter 等开源标准,有效助力开发和测试团队充 ...

  10. 【SpringCloud】02.微服务与SpringCloud

    微服务的特点 一系列微小的服务共同组成 跑在自己的进程里 每个服务为独立的业务开发 独立部署 分布式管理 异构--不同的语言.不同类型的数据库 微服务架构的基础框架/组件 服务注册发现 服务网关(Se ...