第10个点TLE,请求支援!
查看原帖
第10个点TLE,请求支援!
214853
Mecci_miaowu楼主2021/3/23 21:55
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int _400 = 146097;
const int _4 = 1461;
ll r;
int t;
const int mon[2][13]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
bool is_qian;
int d,m;
ll y;
void d1(ll r){
	is_qian = 1;
	y = 4713;
	int year_ = r / _4;
	y = y-year_*4;
	r = r - year_*_4;
	while(1){
		if((y-1)%4==0){
			if(r>=366){
				r -= 366;
				--y;
			}
			else break;
		}
		else{
			if(r>=365){
				r -= 365;
				--y;
			}
			else break;
		}
	}
	int monuse;
	if((y-1)%4==0)monuse = 1;
	else monuse = 0;
	while(1){
		if(r>=mon[monuse][m - 1]){
			r -= mon[monuse][m - 1];
			m++;
		}
		else break;
	}
	d += r;
} 
void d2(ll r){
	is_qian = 0;
	y = 1;
	int year_ = r / _4;
	y = y + year_*4;
	r = r - year_*_4;
	while(1){
		if(y%4==0){
			if(r>=366){
				r -= 366;
				++y;
			}
			else break;
		}
		else{
			if(r>=365){
				r -= 365;
				++y;
			}
			else break;
		}
	}
	int monuse;
	if(y%4==0)monuse = 1;
	else monuse = 0;
	while(1){
		if(r>=mon[monuse][m - 1]){
			r -= mon[monuse][m - 1];
			m++;
		}
		else break;
	}
	d += r;
} 
void d3(ll r){
	is_qian = 0;
	y = 1582;
	if(r<=78){
		if(r<=16){
			m=10;d=15+r;return;
		}
		if(r>16&&r<=46){
			m=11;d=r-16;return;
		}
		if(r>46){
			m=12;d=r-46;return;
		}
	}
	y = 1583;m = 1;d = 1;r -= 78;
	int year_ = r / _400;
	y = y + year_*400;
	r = r - year_*_400;
	while(1){
		if((y%4==0&&y%100!=0)||y%400==0){
			if(r>=366){
				r -= 366;
				++y;
			}
			else break;
		}
		else{
			if(r>=365){
				r -= 365;
				++y;
			}
			else break;
		}
	}
	int monuse;
	if((y%4==0&&y%100!=0)||y%400==0)monuse = 1;
	else monuse = 0;
	while(1){
		if(r>=mon[monuse][m - 1]){
			r -= mon[monuse][m - 1];
			m++;
		}
		else break;
	}
	d += r;
} 
void work(){
	y = 0;d = 1;m = 1;
	scanf("%lld",&r);
	if(r<=1721423)	d1(r);
	if(r>1721423&&r<=1721423+577460+277)	d2(r-1721423-1); 
	if(r>1721423+577460+277)	d3(r-1721423-577460-277-1);
	if(is_qian)printf("%d %d %lld BC\n",d,m,y);
	else	printf("%d %d %lld\n",d,m,y);
}
int main(){
	scanf("%d",&t);
	while(t--)work();
	return 0;
}
2021/3/23 21:55
加载中...