《#5 read 5, expected 4.》
查看原帖
《#5 read 5, expected 4.》
877968
1233211234567a楼主2024/7/22 17:31
#include<bits/stdc++.h>
using namespace std;
long long bd[13]={0,31,59,90,120,151,181,212,243,273,304,334,365};
long long by[5]={5000000000,366,731,1096,1461}; 
int main() 
{
	int Q;
	cin>>Q;
	for (int qqq=1;qqq<=Q;qqq++) 
	{
		long long ru;
		cin>>ru;
		ru+=1;
		long long d=0,m=0,y=-4713;
		if(ru<=1721424) 
		{
			y+=(ru/1461*4);
			ru%=1461;
			for (int i=1;i<=4;i++) 
			{
				if(ru==0) 
				{
					y--;
					d=31;
					m=12;
					break;
				}
				if(ru<=by[i]) 
				{
					y+=(i-1);
					ru%=by[i-1]; 
					for (int j=1;j<=12;j++) 
					{
						if(i==1&&j>=2)bd[j]+=1;
						if(ru<=bd[j]) 
						{
							if(i==1&&j>=3)bd[j-1]+=1;
							m=j;
							d=ru-bd[j-1];
							if(i==1&&j>=3)bd[j-1]-=1;
							if(i==1&&j>=2)bd[j]-=1;
							break;
						}
						if(i==1&&j>=2)bd[j]-=1;
					}
					break;
				}
			}
			printf("%lld %lld %lld BC\n",d,m,abs(y));
		} else 
		{
			by[1]=365;
			by[2]=730;
			by[3]=1095;
			y=0;
			ru-=1721424;
			if(ru<=584024) 
			{
				if(ru>577737) 
				{
					ru+=9;
				}
				y+=(ru/1461*4);
				ru%=1461;
				for (int i=1;i<=4;i++) 
				{
					if(ru==0) 
					{
						d=31;
						y--;
						m=12;
						break;
					}
					if(ru<=by[i]) 
					{
						y+=i;
						ru%=by[i-1];
						for (int j=1;j<=12;j++) 
						{
							if(i==4&&j>=2)bd[j]+=1;
							if(ru<=bd[j]) 
							{
								if(i==4&&j>=3)bd[j-1]+=1;
								m=j;
								d=ru-bd[j-1];
								if(i==4&&j>=3)bd[j-1]-=1;
								if(i==4&&j>=2)bd[j]-=1;
								break;
							}
							if(i==4&&j>=2)bd[j]-=1;
						}
						break;
					}
				}
				printf("%lld %lld %lld \n",d,m,y);
			} else 
			{
				ru-=584024;
				y=1599;
				y+=(ru/146097)*400;
				ru%=146097;
				long long b1[5]={5000000000,36524,36524*2,36524*3,36524*4+1};
				for (int i=1;i<=4;i++) 
				{
					if(ru==0) 
					{
						d=31;
						y--;
						m=12;
						break;
					}
					if(ru<=b1[i]) 
					{
						y+=100*(i-1);
						ru%=b1[i-1];
						if(i==4) 
						{
							y+=(ru/1461)*4;
							for (int i=1;i<=4;i++) 
							{
								if(ru<=by[i]) 
								{
									y+=i;
									ru%=by[i-1];
									for (int j=1;j<=12;j++) 
									{
										if(i==4&&j>=2)bd[j]+=1;
										if(ru<=bd[j]) 
										{
											if(i==4&&j>=3)bd[j-1]+=1;
											m=j;
											d=ru-bd[j-1];
											if(i==4&&j>=3)bd[j-1]-=1;
											if(i==4&&j>=2)bd[j]-=1;
											break;
										}
										if(i==4&&j>=2)bd[j]-=1;
									}
									break;
								}
							}
						} else 
						{
							if(ru>=35064) 
							{
								by[4]-=1;
								ru-=35064;
								for (int i=1;i<=4;i++) 
								{
									if(ru==0) 
									{
										d=31;
										y--;
										m=12;
										break;
									}
									if(ru<=by[i]) 
									{
										y+=i;
										ru%=by[i-1];
										cout<<ru;
										for (int j=1;j<=12;j++) 
										{
											if(ru<=bd[j]) 
											{
												m=j;
												d=ru-bd[j-1];
												break;
											}
										}
										break;
									}
								}
							} else 
							{
								y+=(ru/1461*4);
								ru%=1461;
								for (int i=1;i<=4;i++) 
								{
									if(ru==0) 
									{
										d=31;
										y--;
										m=12;
										break;
									}
									if(ru<=by[i]) 
									{
										y+=i;
										ru%=by[i-1];
										for (int j=1;j<=12;j++) 
										{
											if(i==4&&j>=2)bd[j]+=1;
											if(ru<=bd[j]) 
											{
												if(i==4&&j>=3)bd[j-1]+=1;
												m=j;
												d=ru-bd[j-1];
												if(i==4&&j>=3)bd[j-1]-=1;
												if(i==4&&j>=2)bd[j]-=1;
												break;
											}
											if(i==4&&j>=2)bd[j]-=1;
										}
										break;
									}
								}
							}
						}
						printf("%lld %lld %lld \n",d,m,y);
						break;
					}
				}
			}
		}
	}
	return 0;
}
2024/7/22 17:31
加载中...