社区讨论
wa#6#8求助
P7075[CSP-S 2020] 儒略日参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj9bkv1
- 此快照首次捕获于
- 2025/11/03 22:50 4 个月前
- 此快照最后确认于
- 2025/11/03 22:50 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int q,n,sumr,m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void month1(int yy,int dd,int r){
if(r == 1) m[2]++;
int cnt=0,mm=0;
for(int i = 1;i <= 12; i++){
cnt+=m[i];
if(cnt >= dd){
mm = i;
dd -= (cnt-m[i]);
if(yy-4713 < 0) printf("%lld %lld %lld BC\n",dd,mm,4713-yy);
else printf("%lld %lld %lld\n",dd,mm,yy-4712);
break;
}
}
if(r == 1) m[2]--;
}
void month2(int yy,int dd,int r){
if(r == 1) m[2]++;
int cnt=0,mm=0,flag=0;
for(int i = 1;i <= 12; i++){
cnt+=m[i];
if(cnt >= dd){
mm = i;
dd -= (cnt-m[i]);
printf("%lld %lld %lld\n",dd,mm,yy+1600);
flag=1;
break;
}
}
if(flag == 0) printf("1 1 %lld\n",yy+1601);
if(r == 1) m[2]--;
}
signed main(){
for(int i = 1;i <= 400; i++){
if((i%4==0&&i%100!=0)||i%400==0) sumr++;
}
scanf("%lld",&q);
while(q--){
scanf("%lld",&n);
if(n <= 2299160){
int k = n%(365*4+1);
int yy = n/(365*4+1)*4;
int r = 1;
if(k >= 366){
k-=365;
yy++;
r=0;
}
if(k >= 366){
k-=365;
yy++;
}
if(k >= 366){
k-=365;
yy++;
}
if(r==1) k++;
month1(yy,k,r);
}
else{
n += 10;
if(n <= 2305457){
int k = n%(365*4+1);
int yy = n/(365*4+1)*4;
int r = 1;
if(k > 366){
k-=365;
yy++;
r=0;
}
if(k > 366){
k-=365;
yy++;
}
if(k > 366){
k-=365;
yy++;
}
if(r==1) k++;
month1(yy,k,r);
}
else{
n-=2305458;
int k = n%(365*400+sumr),yy=n/(365*400+sumr)*400,r=1;
if(k>=366){
k-=365;
yy++;
r=0;
}
for(int i = 2;i <= 399; i++){
if(i%4 == 0 && i%100!=0){
if(k >= 367){
k -= 366;
yy ++;
r = 1;
}
else break;
}
else{
if(k >= 366){
k -= 365;
yy ++;
r = 0;
}
else break;
}
}
if(r==1) k++;
month2(yy,k,r);
}
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...