爆零求助orz
查看原帖
爆零求助orz
209944
君玘楼主2020/11/8 08:17

应该是某个地方错了,大部分数据都是对的,但是不知道哪个地方hack了,然后爆零了。。。

大佬们求解orz

#include<bits/stdc++.h>
#define gc ch=getchar()
#define pt puts("")
#define pc putchar(32)
#define ll long long
using namespace std;
template <class T>void read(T &s){
	s=0;T f=1;char gc;
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;gc;}
	while(ch<='9'&&ch>='0'){s=s*10+ch-'0';gc;}
	s*=f;
}
template <class T>void put(T s){
	if(s<0) putchar('-'),s=-s;
	if(s>9) put(s/10);
	putchar(s%10+'0');
}
ll r,q;
ll M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
ll y,m,d,BC,DC;
int main(){
    //freopen("julian.in","r",stdin);
    //freopen("julian.out","w",stdout);
	read(q);
	while(q--){
		read(r);
		y=-4713,m=1,d=1,BC=0,DC=0;
		if(r>=2299239) y=1583,r-=2299239,BC=1,DC=1;
		else if(r>=2299161) y=1582,m=10,d=15,r-=2299161,BC=1,DC=1;
		else if(r==2299160){put(4),pc,put(10),pc,put(1582),pt;continue;}
		else if(r>=1721424) y=1,r-=1721424,BC=1;
		else if(r>=1721058) y=-1,r-=1721058;
		//year
		int run=0;
		if(!BC){
			if(r>=1461) y+=(r/1461)*4,r%=1461;
			if(r>=366) ++y,r-=366;
			y+=r/365,r%=365;
			if((y+1)%4==0) run=1;
		}
		else{
			if(!DC){
				if(r>=1461) y+=(r/1461)*4,r%=1461;
				y+=r/365,r%=365;
				if(y%4==0) run=1;
			}
			else if(y==1583){
				if(r>=6209) y=1600,r-=6209;
				y+=(r/146097)*400,r%=146097;
				if(r<366){run=1;break;}
				while(r>=365){
					if((y%100!=0&&y%4==0)||(y%400==0)){
						if(r<366){run=1;break;}
						else r-=366,++y;
					}
					else{
						if(r<365) break;
						else r-=365,++y;
					}
				}
			}
		}
		if((y%100!=0&&y%4==0)||(y%400==0)) run=1;
		//month
		if(y==1582){
			if(r>=17){
				m=11,d=1,r-=17;
				if(r>=30) ++m,r-=30;
			}
		}	
		else{
			for(int i=1;i<12;++i){
				if(i==2){
					if(run){
						if(r>=29) r-=29,++m;
						else break;
					}
					else{
						if(r>=28) r-=28,++m;
						else break;
					}
				}
				else{
					if(r>=M[i]) r-=M[i],++m;
					else break;
				}
			}
		}
		//day
		d+=r;
		if(y<0) y=-y;
		put(d),pc,put(m),pc,put(y),pc;
		if(!BC) printf("BC");
		pt;
	}
	return 0;
}
2020/11/8 08:17
加载中...