40pts求调
查看原帖
40pts求调
724676
Iwara_qwq楼主2022/10/3 10:56
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
const ll INF=0x7f7f7f7f7f,inf=0x3f3f3f3f3f;
namespace Yorihime_Nao{
	template<class T> T MAX(T x,T y){
		return x>y?x:y;
	}
	template<class T> T MIN(T x,T y){
		return x<y?x:y;
	}
	template<class T,class ... Arg> T MAX(T x,T y,Arg ... arg){
		return MAX(x>y?x:y,arg...);
	}
	template<class T,class ... Arg> T MIN(T x,T y,Arg ... arg){
		return MIN(x<y?x:y,arg...);
	}
	template<class T> T lowbit(T x){
		return x&-x;
	}
	template<class T> void SWAP(T &x,T &y){
		T qwq=x;
		x=y;
		y=qwq;
		return;
	}
}
using namespace Yorihime_Nao;
ll T,n;
ll d,m,y;
ll month[20]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 
int main(){
	cin>>T;
	while(T--){
		cin>>n;
		if(n<=1721058){
			y=4713-n/(3*365+366)*4;
			n%=(3*365+366);
//			cout<<y<<" <<"<<endl;
			m=1;
			if(n>=366){
				n-=366,y--;
				y-=n/365,n=n%365;
			}
//			cout<<y<<" <<"<<endl;
			while(1){
				ll reg=month[m];
				if(m==2&&(y-1)%4==0)reg++;
				if(reg>n)break;
				n-=reg;
				m++;
			}
			d=1+n;
			cout<<d<<" "<<m<<" "<<y<<" BC"<<endl;
		}
		else{
			n-=1721058;
			if(n<=577825){
				y=n/(3*365+366)*4;
				n%=(3*365+366);
				if(n>=365*3)y+=3,n-=(3*365);
				else y+=n/365+1,n%=365;
//				cout<<"year: "<<y<<endl;
				m=1;
				while(1){
					ll reg=month[m];
					if(m==2&&y%4==0)reg++;
					if(reg>n)break;
					n-=reg;
					m++;
				}
				d=n;
				cout<<d<<" "<<m<<" "<<y<<endl;
			}
			else{
				n-=577825;
				y=1582;
				if(n<=31+28+31+30+31+30+31+31+30+4){
					m=1;
					while(1){
						ll reg=month[m];
						if(reg>n)break;
						n-=reg;
						m++;
					}
					d=n;
					cout<<d<<" "<<m<<" "<<y<<endl;
				}
				else{
					n+=10;
					y+=n/(365*400+97)*400;
					n%=365*400+97;
					y+=n/(365*100+24)*100;
					n%=365*100+24;
					y+=n/(365*4+1)*4;
					n%=365*4+1;
					if(n>=365*3)y+=3,n-=(3*365);
					else y+=n/365+1,n%=365;
					m=1;
					while(1){
						ll reg=month[m];
						if(m==2&&y%4==0)reg++;
						if(reg>n)break;
						n-=reg;
						m++;
					}
					d=n;
					cout<<d<<" "<<m<<" "<<y<<endl;
				}
			}
		}
	}
	return 0;
}

2022/10/3 10:56
加载中...