蒟蒻求助3*WA
查看原帖
蒟蒻求助3*WA
357440
NullNone楼主2022/10/18 21:12
#include <iostream>
using namespace std;
// const int STD=1,STM=1,STY=4713;
typedef long long int ll;
const ll MONTH[20]={0,31,28,31,30,31,30,31,31,30,31,30,31};
// inline void print(int _d,int _m,int _y){cout<<_d<<' '<<_m<<' '<<_y<<" BC\n";}
// inline void DEBUG(int _d,int _m,int _y){cout<<"BC "<<_y<<'.'<<_m<<'.'<<_d<<endl;}
// inline void DEBUG2(int _d,int _m,int _y){cout<<_y<<'.'<<_m<<'.'<<_d<<endl;}
// inline bool isr(int _y){return (!(((_y-1)%4)));}
// inline bool isr2(int _y){return !(_y%4);}
inline bool isr3(ll _y){
    if(_y<6295)
        return !(_y%4);
    return ((!((_y-4712)%4))&&(_y-4712)%100)||!((_y-4712)%400);
}
inline bool dt(ll _y,ll _m){
    return _m==2&&isr3(_y);
}
// inline void test(){int d=STD,m=STM,y=STY,no=0;while(y>=1){cout<<"#"<<no++<<": ";DEBUG(d,m,y);d++;if(m==2&&isr(y)){if(d==MONTH[m]+2){d=1;m++;}}else{if(d==MONTH[m]+1){d=1;m++;}}if(m==13){m=1;y--;}}}
ll q,r,lt,rt,mid,ansy,ansm,ansd;
inline ll calc(ll _y){
    if(_y<6295) // ≤6294: 不经过1582年
        return _y*365+(_y+3)/4;
    else
        if(_y==6295)
            return 2299239ll;
        else
            return 2299239ll+365ll*(_y-6295)+(_y-6293)/4-(_y-6213)/100+(_y-5913)/400;
}
inline void run(){
    cin>>r; // 从儒略日过去了多少天
    lt=0; // 从儒略日过去了多少年
    rt=2e9;
    while(lt<rt-1){
        mid=(lt+rt)>>1;
        if(calc(mid)<=r)
            lt=mid;
        else
            rt=mid;
    }
    ansy=lt;
    r-=calc(lt);
    if(ansy-4712==1582){
        r-=10;
        ansm=1;
        while(r>=MONTH[ansm]){
            r-=MONTH[ansm];
            ansm++;
        }
        if((ansm>10)||(ansm==10&&r>3)){
            r+=10;
            while(r>=MONTH[ansm]){
                r-=MONTH[ansm];
                ansm++;
            }
        }
    }else{
        ansm=1;
        while(r>=MONTH[ansm]+dt(ansy,ansm)){
            r-=MONTH[ansm]+dt(ansy,ansm);
            ansm++;
        }
    }
    if(lt<4713){
        cout<<r+1<<' '<<ansm<<' '<<4713-ansy<<" BC\n";
    }else{
        cout<<r+1<<' '<<ansm<<' '<<ansy-4712<<endl;
    }
}
int main(int argc, char const *argv[])
{
    ios::sync_with_stdio(false);
    // freopen("/Users/WHAT_ARE_YOU_LOOKING_AT/Downloads/julian/julian3.in","r",stdin);
    // freopen("/Users/WHAT_ARE_YOU_LOOKING_AT/Downloads/julian/julian3.out","w",stdout);
    cin>>q;
    while(q--)
        run();
    return 0;
}
2022/10/18 21:12
加载中...