社区讨论

wa#6#8求助

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mhj9bkv1
此快照首次捕获于
2025/11/03 22:50
4 个月前
此快照最后确认于
2025/11/03 22:50
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int q,n,sumr,m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void month1(int yy,int dd,int r){
	if(r == 1) m[2]++;
	int cnt=0,mm=0;
	for(int i = 1;i <= 12; i++){
		cnt+=m[i];
		if(cnt >= dd){
			mm = i;
			dd -= (cnt-m[i]);
			if(yy-4713 < 0) printf("%lld %lld %lld BC\n",dd,mm,4713-yy);
			else printf("%lld %lld %lld\n",dd,mm,yy-4712);
			break;
		}
	}
	if(r == 1) m[2]--;
}
void month2(int yy,int dd,int r){
	if(r == 1) m[2]++;
	int cnt=0,mm=0,flag=0;
	for(int i = 1;i <= 12; i++){
		cnt+=m[i];
		if(cnt >= dd){
			mm = i;
			dd -= (cnt-m[i]);
			printf("%lld %lld %lld\n",dd,mm,yy+1600);
			flag=1;
			break;
		}
	}
	if(flag == 0) printf("1 1 %lld\n",yy+1601);
	if(r == 1) m[2]--;
}
signed main(){
	for(int i = 1;i <= 400; i++){
		if((i%4==0&&i%100!=0)||i%400==0) sumr++;
	}
	scanf("%lld",&q);
	while(q--){
		scanf("%lld",&n);
		if(n <= 2299160){
			int k = n%(365*4+1);
			int yy = n/(365*4+1)*4;
			int r = 1;
			if(k >= 366){
				k-=365;
				yy++;
				r=0;
			}
			if(k >= 366){
				k-=365;
				yy++;
			}
			if(k >= 366){
				k-=365;
				yy++;
			}
			if(r==1) k++;
			month1(yy,k,r);
		}
		else{
			n += 10;
			if(n <= 2305457){
				int k = n%(365*4+1);
				int yy = n/(365*4+1)*4;
				int r = 1;
				if(k > 366){
					k-=365;
					yy++;
					r=0;
				}
				if(k > 366){
					k-=365;
					yy++;
				}
				if(k > 366){
					k-=365;
					yy++;
				}
				if(r==1) k++;
				month1(yy,k,r);
			}
			else{
				n-=2305458;
				int k = n%(365*400+sumr),yy=n/(365*400+sumr)*400,r=1;
				if(k>=366){
					k-=365;
					yy++;
					r=0;
				}
				for(int i = 2;i <= 399; i++){
					if(i%4 == 0 && i%100!=0){
						if(k >= 367){
							k -= 366;
							yy ++;
							r = 1;
						}
						else break;
					}
					else{
						if(k >= 366){
							k -= 365;
							yy ++;
							r = 0;
						}
						else break;
					}
				}
				if(r==1) k++;
				month2(yy,k,r);
			}
		}
	}
	return 0;
}

回复

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

正在加载回复...