真的调不出来了40pts 前面的四个点没问题 后面的就是调不出来
#include<bits/stdc++.h>
using namespace std;
long long q,r;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
long long rd(){
long long x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
int main(){
q=rd();
while(q--){
r=rd();
month[2]=28;
if(r<=1721423){
int l1=1,r1=4713,day;
while(l1<r1){
int mid=(l1+r1)>>1;
day=(4713-mid)*365+(4713-mid+3)/4;
if(r>=day) r1=mid;
else l1=mid+1;
}
r-=(4713-l1)*365+(4713-l1+3)/4;
if((l1-1)%4==0) month[2]++;
int p=1;
while(r>0){
if(r-month[p]<0) break;
r-=month[p];
p++;
}
cout<<1+r<<" "<<p<<" "<<l1<<" "<<"BC"<<endl;
}
else{
r-=1721423;
long long l1=1,r1=1e9+1,day;
while(l1<r1){
long long mid=(l1+r1)>>1;
if(mid<=1582) day=(mid-1)*365+(mid-1)/4;
else day=577815+(mid-1583)*365+(mid-1585+4)/4-(mid-1601+100)/100+(mid-1601+400)/400;
if(mid<=1582)
if(mid%4==0) day++;
else if(mid%400==0||(mid%4==0&&mid%100!=0)) day++;
day+=365;
if(r>day) l1=mid+1;
else r1=mid;
}
if(l1<=1582) r-=(l1-1)*365+(l1-1)/4;
else r-=(577815+(l1-1583)*365+(l1-1585+4)/4-(l1-1601+100)/100+(l1-1601+400)/400);
if(l1<=1582)
if(l1%4==0) month[2]++;
else if(l1%400==0||(l1%4==0&&l1%100!=0)) month[2]++;
int p=1;
while(r>0){
if(r-month[p]<0) break;
r-=month[p];
p++;
}
if(l1==1582){
if(r>=5) r=r-5+14;
if(r>31) p++,r%=31;
}
cout<<r<<" "<<p<<" "<<l1<<endl;
}
}
return 0;
}