freopen("julian3.in,"r",stdin)在此千古留名
查看原帖
freopen("julian3.in,"r",stdin)在此千古留名
242235
ITC_天泠楼主2020/11/8 18:16

如题freopen写挂,代码已过冥间数据。

#include<bits/stdc++.h>
using namespace std;
#define TL long long int
TL anstowork1=0,QSSS,ddd,anstowork2=0,yee;
TL retnian_BC(TL t){
	if(t==4714ll) return 0;
	TL sum1=0ll,sum2=0ll,sum3=0ll;
	t=4713ll-t+1ll;
	sum1=(t+3ll)/4ll;
	sum2=t-sum1;
	sum3=sum1*366ll+sum2*365ll;
	return sum3;
}
TL retnian_GY_1(TL t){
	TL sum1=0ll,sum2=0ll,sum3=0ll;
	sum1=t/4;
	sum2=t-sum1;
	sum3=sum1*366ll+sum2*365ll;
	return sum3;
}
TL retnian_GY_2(TL t){
	TL sum1=0ll,sum2=0ll,sum3=0ll,sum4=0ll,sum5=0ll;
	sum1=(t-1582+2)/4;
	sum4=(t-1582+82)/100;
	sum5=(t-1582+82+300)/400;
	sum2=t-sum1+sum4-sum5-1582;
	sum3=(t-sum2-1582)*366ll+sum2*365ll+anstowork2+87ll;
	return sum3;
}
TL work1(TL t){
	TL l=1ll,r=4713ll,mid_1=(l+r)>>1ll;
	while(l<r){
		mid_1=(l+r)>>1;
		if(retnian_BC(mid_1)==t){
			return mid_1;
		}
		if(retnian_BC(mid_1)<t){
			r=mid_1;
			continue;
		}
		if(retnian_BC(mid_1)>t){
			l=mid_1+1;
			continue;
		}
	}
	if(retnian_BC(l)>=t) return l;
	else return l-1;
}
TL work2(TL t){
	if(t==0) return 0;
	TL l=1ll,r=1582ll,mid_1=(l+r)>>1ll;
	while(l<r){
		mid_1=(l+r)>>1;
		if(retnian_GY_1(mid_1)==t){
			return mid_1;
		}
		if(retnian_GY_1(mid_1)>t){
			r=mid_1;
			continue;
		}
		if(retnian_GY_1(mid_1)<t){
			l=mid_1+1;
			continue;
		}
	}
	if(retnian_GY_1(l)>=t) return l;
	else return l+1;
}
TL work3(TL t){
	TL l=1583ll,r=1000000000ll,mid_1=(l+r)>>1ll;
	while(l<r){
		mid_1=(l+r)>>1;
		if(retnian_GY_2(mid_1)==t){
			return mid_1;
		}
		if(retnian_GY_2(mid_1)>t){
			r=mid_1;
			continue;
		}
		if(retnian_GY_2(mid_1)<t){
			l=mid_1+1;
			continue;
		}
	}
	if(retnian_GY_2(l)>=t) return l;
	else return l+1;
}
TL d2;
TL yue(TL t,TL y){
	if(t>31) t-=31;
	else {
		d2=t;return 1;
	}
	if(y==1){
		if(t>28) t-=28;
		else {
			d2=t;return 2;	
		}
	}else if(y==2){
		if(t>29) t-=29;
		else {
			d2=t;return 2;	
		}
	}
	if(t>31) t-=31;
	else {
		d2=t;return 3;
	}
	if(t>30) t-=30;
	else {
		d2=t;return 4;
	}
	if(t>31) t-=31;
	else {
		d2=t;return 5;
	}
	if(t>30) t-=30;
	else {
		d2=t;return 6;
	}
	if(t>31) t-=31;
	else {
		d2=t;return 7;
	}
	if(t>31) t-=31;
	else {
		d2=t;return 8;
	}
	if(t>30) t-=30;
	else {
		d2=t;return 9;
	}
	if(t>31) t-=31;
	else {
		d2=t;return 10;
	}
	if(t>30) t-=30;
	else {
		d2=t;return 11;
	}
	if(t>31) {
		yee++;
		d2=t-31;
		return 1;
	}else{
		d2=t;return 12;
	}
}
TL yue1(TL t,TL y){
	if(t>31) t-=31;
	else {
		d2=t;return 1;
	}
	if(y==1){
		if(t>28) t-=28;
		else {
			d2=t;return 2;	
		}
	}else if(y==2){
		if(t>29) t-=29;
		else {
			d2=t;return 2;	
		}
	}
	if(t>31) t-=31;
	else {
		d2=t;return 3;
	}
	if(t>30) t-=30;
	else {
		d2=t;return 4;
	}
	if(t>31) t-=31;
	else {
		d2=t;return 5;
	}
	if(t>30) t-=30;
	else {
		d2=t;return 6;
	}
	if(t>31) t-=31;
	else {
		d2=t;return 7;
	}
	if(t>31) t-=31;
	else {
		d2=t;return 8;
	}
	if(t>30) t-=30;
	else {
		d2=t;return 9;
	}
	if(t>31) t-=31;
	else {
		d2=t;return 10;
	}
	if(t>30) t-=30;
	else {
		d2=t;return 11;
	}
	if(t>31) {
		yee--;
		d2=t-31;
		return 1;
	}else{
		d2=t;return 12;
	}
}
int main(){
	freopen("julian3.in","r",stdin);
	freopen("julian3.out","w",stdout);
	anstowork1=retnian_BC(1ll);
	anstowork2=retnian_GY_1(1581ll);
	anstowork2+=257ll;
	cin>>QSSS;
	TL mon,temp1,temp2;
	while(QSSS--){
		cin>>ddd;
		if(ddd<=anstowork1){
			yee=work1(ddd);
			temp1=retnian_BC(yee);
			temp2=retnian_BC(yee+1);
			temp1-=temp2;
			if(temp1==366){
				mon=yue1(ddd-temp2+1,2);
			}else{
				mon=yue1(ddd-temp2+1,1);
			}
			if(yee!=0) cout<<d2<<" "<<mon<<" "<<yee<<" "<<"BC"<<endl;
			else cout<<d2<<" "<<mon<<" "<<yee+1<<endl;
		}else {
			ddd-=anstowork1;
			if(ddd<=anstowork2){
				yee=work2(ddd);
				temp1=retnian_GY_1(yee);
				temp2=retnian_GY_1(yee-1);
				temp1-=temp2;
				if(temp1==366){
					mon=yue(ddd-temp2+1,2);
				}else{
					mon=yue(ddd-temp2+1,1);
				}
				cout<<d2<<" "<<mon<<" "<<yee<<endl;
			}else{
				ddd-=anstowork2;
				if(ddd<=98){yee=1582ll;
					mon=yue(ddd+257ll+1ll,1);
					if(mon<10||(mon==10&&d2<=4)) cout<<d2<<" "<<mon<<" "<<yee<<endl;
					else {
						mon=yue(ddd+257ll+11ll,1);
						cout<<d2<<" "<<mon<<" "<<yee<<endl;
					}
				}else{ddd-=11;
					ddd+=anstowork2;
					yee=work3(ddd);
					temp1=retnian_GY_2(yee);
					temp2=retnian_GY_2(yee-1);
					temp1-=temp2;
					if(temp1==366ll){
						mon=yue(ddd-temp2+1,2);
					}else{
						mon=yue(ddd-temp2+1,1);
					}
					cout<<d2<<" "<<mon<<" "<<yee<<endl;
				}
			}
		}
	}
	return 0;
}
2020/11/8 18:16
加载中...