社区讨论
悬2关,80WAOn8,9
P7075[CSP-S 2020] 儒略日参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj0ojv3
- 此快照首次捕获于
- 2025/11/03 18:48 4 个月前
- 此快照最后确认于
- 2025/11/03 18:48 4 个月前
CPP
#include<cstdio>
#define int long long
using namespace std;
namespace Main{
const int N=5010,M=410,mth[20][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
int T,n;
int p=365,r=366;
int dAC[3]={365,366},dBC[N];
int d400=146097,d100=36524,d4=1461;
inline bool AC(int x){
if(x<=1582){
return !(x%4);
}
return !(x%400)?1:(!(x%100)?0:(bool)(!(x%4)));
}
inline bool BC(int x){
--x;
return !(x%4);
}
inline void init(){
for(int i=4713;i>=1;i--){
dBC[i]=BC(i)?r:p;
}
return ;
}
inline void main(){
init();
scanf("%lld",&T);
while(T--){
scanf("%lld",&n);
int nn=n;
int i=4713;
bool flag=false;
for(;i>=1;i--){
if(n>=dBC[i]){
n-=dBC[i];
}
else{
flag=true;
break;
}
}
if(flag){
// printf("year=%lld,hd=%lld\n",i,n);
// return ;
bool pr=BC(i);
int j=1;
for(;j<=12;j++){
if(n>=mth[j][pr]){
n-=mth[j][pr];
}
else{
break;
}
}
printf("%lld %lld %lld BC\n",n+1,j,i);
}
else{
i=1;
bool fhd=false;
for(;;i++){
int ck=AC(i);
if(i==1601){
break;
}
if(i==1582){
if(n>=355){
n-=355;
}
else{
fhd=true;
break;
}
}
else{
if(n>=dAC[ck]){
n-=dAC[ck];
}
else{
fhd=true;
break;
}
}
}
if(fhd){
int j=1;
int pr=AC(i);
bool flagg=false;
for(;j<=12;j++){
if(i==1582&&j==10){
if(n>=21){
n-=21;
}
else{
flagg=true;
break;
}
}
else{
if(n>=mth[j][pr]){
n-=mth[j][pr];
}
else{
break;
}
}
}
if(flagg){
if(j==10&&n>4){
n+=10;
}
}
printf("%lld %lld %lld\n",n+1,j,i);
}
else{
// if(nn==7273111){
// printf("1. n=%lld ",n);
// }
int dist400=n/d400;
n%=d400;
int dist100=n/d100;
n%=d100;
int dist4=n/d4;
n%=d4;
// if(nn==7273111){
// printf("2. n=%lld",n);
// }
i=1601+400*dist400+100*dist100+4*dist4;
int j=1;
int pr=AC(i);
// bool flagg=false;
for(;;i++){
int ck=AC(i);
if(n>=dAC[ck]){
n-=dAC[ck];
}
else{
break;
}
}
pr=AC(i);
for(;j<=12;j++){
if(n>=mth[j][pr]){
n-=mth[j][pr];
}
else{
break;
}
}
// if(j==12&&n==30){
//// j=1,n=0;
//
// }
printf("%lld %lld %lld\n",n+1,j,i);
}
}
}
return ;
}
}
signed main(){
// freopen("fuck.in","r",stdin);
// freopen("fuck.out","w",stdout);
// freopen("D:\\fuck\\1.in","r",stdin);
// freopen("fuck1.out","w",stdout);
Main::main();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...