如题freopen写挂,代码已过冥间数据。
#include<bits/stdc++.h>
using namespace std;
#define TL long long int
TL anstowork1=0,QSSS,ddd,anstowork2=0,yee;
TL retnian_BC(TL t){
if(t==4714ll) return 0;
TL sum1=0ll,sum2=0ll,sum3=0ll;
t=4713ll-t+1ll;
sum1=(t+3ll)/4ll;
sum2=t-sum1;
sum3=sum1*366ll+sum2*365ll;
return sum3;
}
TL retnian_GY_1(TL t){
TL sum1=0ll,sum2=0ll,sum3=0ll;
sum1=t/4;
sum2=t-sum1;
sum3=sum1*366ll+sum2*365ll;
return sum3;
}
TL retnian_GY_2(TL t){
TL sum1=0ll,sum2=0ll,sum3=0ll,sum4=0ll,sum5=0ll;
sum1=(t-1582+2)/4;
sum4=(t-1582+82)/100;
sum5=(t-1582+82+300)/400;
sum2=t-sum1+sum4-sum5-1582;
sum3=(t-sum2-1582)*366ll+sum2*365ll+anstowork2+87ll;
return sum3;
}
TL work1(TL t){
TL l=1ll,r=4713ll,mid_1=(l+r)>>1ll;
while(l<r){
mid_1=(l+r)>>1;
if(retnian_BC(mid_1)==t){
return mid_1;
}
if(retnian_BC(mid_1)<t){
r=mid_1;
continue;
}
if(retnian_BC(mid_1)>t){
l=mid_1+1;
continue;
}
}
if(retnian_BC(l)>=t) return l;
else return l-1;
}
TL work2(TL t){
if(t==0) return 0;
TL l=1ll,r=1582ll,mid_1=(l+r)>>1ll;
while(l<r){
mid_1=(l+r)>>1;
if(retnian_GY_1(mid_1)==t){
return mid_1;
}
if(retnian_GY_1(mid_1)>t){
r=mid_1;
continue;
}
if(retnian_GY_1(mid_1)<t){
l=mid_1+1;
continue;
}
}
if(retnian_GY_1(l)>=t) return l;
else return l+1;
}
TL work3(TL t){
TL l=1583ll,r=1000000000ll,mid_1=(l+r)>>1ll;
while(l<r){
mid_1=(l+r)>>1;
if(retnian_GY_2(mid_1)==t){
return mid_1;
}
if(retnian_GY_2(mid_1)>t){
r=mid_1;
continue;
}
if(retnian_GY_2(mid_1)<t){
l=mid_1+1;
continue;
}
}
if(retnian_GY_2(l)>=t) return l;
else return l+1;
}
TL d2;
TL yue(TL t,TL y){
if(t>31) t-=31;
else {
d2=t;return 1;
}
if(y==1){
if(t>28) t-=28;
else {
d2=t;return 2;
}
}else if(y==2){
if(t>29) t-=29;
else {
d2=t;return 2;
}
}
if(t>31) t-=31;
else {
d2=t;return 3;
}
if(t>30) t-=30;
else {
d2=t;return 4;
}
if(t>31) t-=31;
else {
d2=t;return 5;
}
if(t>30) t-=30;
else {
d2=t;return 6;
}
if(t>31) t-=31;
else {
d2=t;return 7;
}
if(t>31) t-=31;
else {
d2=t;return 8;
}
if(t>30) t-=30;
else {
d2=t;return 9;
}
if(t>31) t-=31;
else {
d2=t;return 10;
}
if(t>30) t-=30;
else {
d2=t;return 11;
}
if(t>31) {
yee++;
d2=t-31;
return 1;
}else{
d2=t;return 12;
}
}
TL yue1(TL t,TL y){
if(t>31) t-=31;
else {
d2=t;return 1;
}
if(y==1){
if(t>28) t-=28;
else {
d2=t;return 2;
}
}else if(y==2){
if(t>29) t-=29;
else {
d2=t;return 2;
}
}
if(t>31) t-=31;
else {
d2=t;return 3;
}
if(t>30) t-=30;
else {
d2=t;return 4;
}
if(t>31) t-=31;
else {
d2=t;return 5;
}
if(t>30) t-=30;
else {
d2=t;return 6;
}
if(t>31) t-=31;
else {
d2=t;return 7;
}
if(t>31) t-=31;
else {
d2=t;return 8;
}
if(t>30) t-=30;
else {
d2=t;return 9;
}
if(t>31) t-=31;
else {
d2=t;return 10;
}
if(t>30) t-=30;
else {
d2=t;return 11;
}
if(t>31) {
yee--;
d2=t-31;
return 1;
}else{
d2=t;return 12;
}
}
int main(){
freopen("julian3.in","r",stdin);
freopen("julian3.out","w",stdout);
anstowork1=retnian_BC(1ll);
anstowork2=retnian_GY_1(1581ll);
anstowork2+=257ll;
cin>>QSSS;
TL mon,temp1,temp2;
while(QSSS--){
cin>>ddd;
if(ddd<=anstowork1){
yee=work1(ddd);
temp1=retnian_BC(yee);
temp2=retnian_BC(yee+1);
temp1-=temp2;
if(temp1==366){
mon=yue1(ddd-temp2+1,2);
}else{
mon=yue1(ddd-temp2+1,1);
}
if(yee!=0) cout<<d2<<" "<<mon<<" "<<yee<<" "<<"BC"<<endl;
else cout<<d2<<" "<<mon<<" "<<yee+1<<endl;
}else {
ddd-=anstowork1;
if(ddd<=anstowork2){
yee=work2(ddd);
temp1=retnian_GY_1(yee);
temp2=retnian_GY_1(yee-1);
temp1-=temp2;
if(temp1==366){
mon=yue(ddd-temp2+1,2);
}else{
mon=yue(ddd-temp2+1,1);
}
cout<<d2<<" "<<mon<<" "<<yee<<endl;
}else{
ddd-=anstowork2;
if(ddd<=98){yee=1582ll;
mon=yue(ddd+257ll+1ll,1);
if(mon<10||(mon==10&&d2<=4)) cout<<d2<<" "<<mon<<" "<<yee<<endl;
else {
mon=yue(ddd+257ll+11ll,1);
cout<<d2<<" "<<mon<<" "<<yee<<endl;
}
}else{ddd-=11;
ddd+=anstowork2;
yee=work3(ddd);
temp1=retnian_GY_2(yee);
temp2=retnian_GY_2(yee-1);
temp1-=temp2;
if(temp1==366ll){
mon=yue(ddd-temp2+1,2);
}else{
mon=yue(ddd-temp2+1,1);
}
cout<<d2<<" "<<mon<<" "<<yee<<endl;
}
}
}
}
return 0;
}