#include<bits/stdc++.h>
#define int long long
using namespace std;
int T,x,y,m,d;
int M[20]={0,31,28,31,30,31,30,31,31,30,31,30,31,30};
void read(int &x){
x=0;
int f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+(c^48),c=getchar();
x*=f;
}
void WRITE(int x){
if (x==0)return;
WRITE(x/10);
putchar(x%10+'0');
}
void write(int x){
if (x==0)putchar('0');
else WRITE(x);
}
bool check2(int x){
if (x>0)return ((x%4==0 && x%100!=0) || (x%400==0));
else return check2(abs(x)-1);
}
bool check(int x){
if (x>0)return x%4==0;
else return check(abs(x)-1);
}
signed main(){
read(T);
while (T--){
read(x);
y=-4713,m=1,d=1;
if (x<1721424){
while (x>=((check(y))?(366):(365))){
if (check(y)){
x-=366;
}else x-=365;
if (x<0){
if (check(y)){
x+=366;
}else x+=365;
break;
}
y++;
}
if (check(y))M[2]++;
for (int i=1;i<=12;i++){
if (x>=M[i]){
x-=M[i];
m=i+1;
}else break;
}
d+=x;
write(d);putchar(' ');
write(m);putchar(' ');
write(abs(y));putchar(' ');
putchar('B');putchar('C');
putchar('\n');
if (check(y))M[2]--;
}else{
if (x<1721424+577737){
x-=1721424;
y=1;
y+=(x/(366+365+365+365)*4);
x%=(366+365+365+365);
while (x>=(check(y)?(366):(365))){
if (check(y))x-=366;
else x-=365;
y++;
}
if (check(y))M[2]++;
for (int i=1;i<=12;i++){
if (x>=M[i]){
x-=M[i];
m=i+1;
}else break;
}
d+=x;
write(d);putchar(' ');
write(m);putchar(' ');
write(abs(y));putchar(' ');
putchar('\n');
if (check(y))M[2]--;
}else{
x-=1721424+577737;
y=1582,m=10,d=14;
if (x<=17){
d+=x;
write(d);putchar(' ');
write(m);putchar(' ');
write(abs(y));putchar(' ');
putchar('\n');
return 0;
}
x-=17;
d=1;
m++;
if (x<30){
write(d);putchar(' ');
write(m);putchar(' ');
write(abs(y));putchar(' ');
putchar('\n');
return 0;
}
x-=30;
d=1;
m++;
if (x<31){
write(d);putchar(' ');
write(m);putchar(' ');
write(abs(y));putchar(' ');
putchar('\n');
return 0;
}
x-=31;
d=1;m=1;y++;
y+=4000*(x/1460970);
x%=1460970;
y+=400*(x/146097);
x%=146097;
while(x>=((check2(y))?(366):(365))){
if (check2(y))x-=366;
else x-=365;
y++;
}
if (check2(y))M[2]++;
for (int i=1;i<=12;i++){
if (x>=M[i]){
x-=M[i];
m=i+1;
}else break;
}
d+=x;
write(d);putchar(' ');
write(m);putchar(' ');
write(abs(y));putchar(' ');
putchar('\n');
if (check2(y))M[2]--;
}
}
}
return 0;
}
MLE了,有什么可以卡的吗
求助,thx