社区讨论

悬2关,80WAOn8,9

P7075[CSP-S 2020] 儒略日参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhj0ojv3
此快照首次捕获于
2025/11/03 18:48
4 个月前
此快照最后确认于
2025/11/03 18:48
4 个月前
查看原帖
CPP
#include<cstdio>
#define int long long
using namespace std;
namespace Main{
	const int N=5010,M=410,mth[20][2]={{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}};
	int T,n;
	int p=365,r=366;
	int dAC[3]={365,366},dBC[N];
	int d400=146097,d100=36524,d4=1461;
	inline bool AC(int x){
		if(x<=1582){
			return !(x%4);
		}
		return !(x%400)?1:(!(x%100)?0:(bool)(!(x%4)));
	}
	inline bool BC(int x){
		--x;
		return !(x%4);
	}
	inline void init(){
		for(int i=4713;i>=1;i--){
			dBC[i]=BC(i)?r:p;
		}
		return ;
	}
	inline void main(){
		init();
		scanf("%lld",&T);
		while(T--){
			scanf("%lld",&n);
			int nn=n;
			int i=4713;
			bool flag=false;
			for(;i>=1;i--){
				if(n>=dBC[i]){
					n-=dBC[i];
				}
				else{
					flag=true;
					break;
				}
			}
			if(flag){
//				printf("year=%lld,hd=%lld\n",i,n);
//				return ;
				bool pr=BC(i);
				int j=1;
				for(;j<=12;j++){
					if(n>=mth[j][pr]){
						n-=mth[j][pr];
					}
					else{
						break;
					}
				}
				printf("%lld %lld %lld BC\n",n+1,j,i);
			}
			else{
				i=1;
				bool fhd=false;
				for(;;i++){
					int ck=AC(i);
					if(i==1601){
						break;
					}
					if(i==1582){
						if(n>=355){
							n-=355;
						}
						else{
							fhd=true;
							break;
						}
					}
					else{
						if(n>=dAC[ck]){
							n-=dAC[ck];
						}
						else{
							fhd=true;
							break;
						}
					}
				}
				if(fhd){
					int j=1;
					int pr=AC(i);
					bool flagg=false;
					for(;j<=12;j++){
						if(i==1582&&j==10){
							if(n>=21){
								n-=21;
							}
							else{
								flagg=true;
								break;
							}
						}
						else{
							if(n>=mth[j][pr]){
								n-=mth[j][pr];
							}
							else{
								break;
							}
						}
					}
					if(flagg){
						if(j==10&&n>4){
							n+=10;
						}
					}
					printf("%lld %lld %lld\n",n+1,j,i);
				}
				else{
//					if(nn==7273111){
//						printf("1. n=%lld ",n);
//					}
					int dist400=n/d400;
					n%=d400;
					int dist100=n/d100;
					n%=d100;
					int dist4=n/d4;
					n%=d4;
//					if(nn==7273111){
//						printf("2. n=%lld",n);
//					}
					i=1601+400*dist400+100*dist100+4*dist4;
					int j=1;
					int pr=AC(i);
//					bool flagg=false;
					for(;;i++){
						int ck=AC(i);
						if(n>=dAC[ck]){
							n-=dAC[ck];
						}
						else{
							break;
						}
					}
					pr=AC(i);
					for(;j<=12;j++){
						if(n>=mth[j][pr]){
							n-=mth[j][pr];
						}
						else{
							break;
						}
					}
//					if(j==12&&n==30){
////						j=1,n=0;
//						
//					}
					printf("%lld %lld %lld\n",n+1,j,i);
				}
			}
		}
		return ;
	}
}
signed main(){
//	freopen("fuck.in","r",stdin);
//	freopen("fuck.out","w",stdout);
//	 freopen("D:\\fuck\\1.in","r",stdin);
//	 freopen("fuck1.out","w",stdout);
	Main::main();
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...