观察测试数据,代码有部分答案在1582.10−1582.12之间的答案与标准答案差十天,但并不是全部在这个范围内的答案都差十天,蒟蒻没有看出哪里错误,求大佬查错
else {
x-=577768;
x+=30;
if(x<=77) {
if(x<=16){
printf("%lld 10 1582\n",x+15);
return;
}
else {
x-=16;
if(x<=30){
printf("%lld 11 1582\n",x);
return;
}
else {
x-=30;
printf("%lld 12 1582\n",x);
return;
}
}
return;
} else {
x-=77;
ll g=(x/146097)+1;
g--;
g*=400;
x%=146097;
g+=1582;
for(ll i=g+1; i<=g+400; ++i) {
ll p=i-g;
SS[p]=SS[p-1]+365;
if(checkyear(i))SS[p]++;
}
int l=1,r=400,A;
while(l<=r) {
int mid=(l+r)>>1;
if(check3(mid,x))r=mid-1,A=mid;
else l=mid+1;
}
x-=SS[A-1];
if(A+g==1582ll)x+=10;
for(int j=1; j<=12; ++j) {
if(checkyear(A+g)) {
if(x<sumr[j]) {
x-=sumr[j-1];
if(x==0)j--,x=sumr[j]-sumr[j-1];
printf("%lld %d %lld\n",x,j,A+g);
return;
}
if(x==sumr[j]&&j==12){
printf("31 12 %lld\n",A+g);
return ;
}
} else {
if(x<sump[j]) {
x-=sump[j-1];
if(x==0)j--,x=sump[j]-sump[j-1];
printf("%lld %d %lld\n",x,j,A+g);
return;
}
if(x==sump[j]&&j==12){
printf("31 12 %lld\n",A+g);
return;
}
}
}
}
}
}
return;
这是1582年以后的代码