蒟蒻1582年差十天 调试半天未果……求助
查看原帖
蒟蒻1582年差十天 调试半天未果……求助
128591
Refined_heart楼主2020/11/9 22:14

观察测试数据,代码有部分答案在1582.101582.121582.10-1582.12之间的答案与标准答案差十天,但并不是全部在这个范围内的答案都差十天,蒟蒻没有看出哪里错误,求大佬查错

 else {
			x-=577768;
			x+=30;
			if(x<=77) {
				if(x<=16){
					printf("%lld 10 1582\n",x+15);
					return;
				}
				else {
					x-=16;
					if(x<=30){
						printf("%lld 11 1582\n",x);
						return;
					}
					else {
						x-=30;
						printf("%lld 12 1582\n",x);
						return;
					}
				}
				return;
			} else {
				x-=77;
				ll g=(x/146097)+1;
				g--;
				g*=400;
				x%=146097;
				g+=1582;
				for(ll i=g+1; i<=g+400; ++i) {
					ll p=i-g;
					SS[p]=SS[p-1]+365;
					if(checkyear(i))SS[p]++;
				}
				int l=1,r=400,A;
				while(l<=r) {
					int mid=(l+r)>>1;
					if(check3(mid,x))r=mid-1,A=mid;
					else l=mid+1;
				}
				x-=SS[A-1];
				if(A+g==1582ll)x+=10;
				for(int j=1; j<=12; ++j) {
					if(checkyear(A+g)) {
						if(x<sumr[j]) {
							x-=sumr[j-1];
							if(x==0)j--,x=sumr[j]-sumr[j-1];
							printf("%lld %d %lld\n",x,j,A+g);
							return;
						}
						if(x==sumr[j]&&j==12){
							printf("31 12 %lld\n",A+g);
							return ;
						}
					} else {
						if(x<sump[j]) {
							x-=sump[j-1];
							if(x==0)j--,x=sump[j]-sump[j-1];
							printf("%lld %d %lld\n",x,j,A+g);
							return;
						}
						if(x==sump[j]&&j==12){
							printf("31 12 %lld\n",A+g);
							return;
						}
					}
				}
			}
		}
	}
	return;

这是15821582年以后的代码

2020/11/9 22:14
加载中...