关于提高组T1
  • 板块学术版
  • 楼主微分几何
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/11/9 08:59
  • 上次更新2023/11/5 08:24:37
查看原帖
关于提高组T1
120190
微分几何楼主2020/11/9 08:59

为什么我的代码只有40分?

#include<bits/stdc++.h>
using namespace std;
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
	//freopen("P7075_5.in","r",stdin);
	//freopen("julian.out","w",stdout);
	int t;
	cin>>t;
	while(t--)
	{
		long long n;
		scanf("%d",&n);
		n++;
		long long day=0,month,year,u,x;
		if(n<=1721424)
		{
			long long p=0;
			for(int i=4713;i>=1;i--)
			{
				if((i-1)%4==0)	u=366;
				else	u=365;
				p+=u;
				if(n<=p)
				{
					year=i;
					p-=u;
					for(int j=1;j<=12;j++)
					{
						if(u==366&&j==2)	x=29;
						else	x=d[j];
						p+=x;
						if(n<=p)
						{
							month=j;
							p-=x;
							day=n-p;
							break;
						}
					}
					break;
				}
			}
			cout<<day<<" "<<month<<" "<<year<<" BC"<<endl;
			continue;
		}
		n-=1721424;
		if(n<=584390)
		{
			long long y=n/(365*3+366);
			long long zong=y*(365*3+366);
			n-=zong;
			long long i;
			if(n%(365*3+366)==0)
			{
				day=31;
				month=12;
				year=y*4;
				cout<<day<<" "<<month<<" "<<year<<endl;
				continue;
			}
			else	i=y*4+1;
			for(i;i<=y*4+4;i++)
			{
				if(i==1582)	u=355;
				else if(i%4==0)	u=366;
				else	u=365;
				n-=u;
				if(n==0)
				{
					year=i;
					month=12;
					day=31;
					break;
				}
				else if(n<0)
				{
					year=i;
					n+=u;
					for(int j=1;j<=12;j++)
					{
						if(u==355&&j==10)	x=21;
						else if(u==366&&j==2)	x=29;
						else	x=d[j];
						n-=x;
						if(n==0)
						{
							if(u==355)	day=31;
							else day=x;
							month=j;
							break;
						}
						else if(n<0)
						{
							month=j;
							n+=x;
							if(u==355&&j==10)
							{
								if(n<5)	day=n;
								else	day=n+10;
							}
							else	day=n;
							break;
						}
					}
					break;
				}
			}
			cout<<day<<" "<<month<<" "<<year<<endl;
			continue;
		}
		n-=584390;
		long long y=n/146097;
		long long zong=y*146097;
		n-=zong;
		long long i;
		if(n%146097==0)
		{
			day=31;
			month=12;
			year=1600+y*400;
			cout<<day<<" "<<month<<" "<<year<<endl;
			continue;
		}
		else	i=1600+y*400+1;
		for(i;i<=1600+y*400+400;i++)
		{
			if(i%400==0||(i%4==0&&i%100!=0))	u=366;
			else	u=365;
			n-=u;
			if(n==0)
			{
				day=31;
				month=12;
				year=i;
				cout<<day<<" "<<month<<" "<<year<<endl;
				break;
			}
			else if(n<0)
			{
				year=i;
				n+=u;
				for(int j=1;j<=12;j++)
				{
					if(u==366&&j==2)	x=29;
					else	x=d[j];
					n-=x;
					if(n==0)
					{
						day=x;
						month=j;
						break;
					}
					else if(n<0)
					{
						month=j;
						n+=x;
						day=n;
						break;
					}
				}
				break;
			}
		}
		cout<<day<<" "<<month<<" "<<year<<endl;
	}
	return 0;
}
2020/11/9 08:59
加载中...