信息学发现量子纠缠事件
查看原帖
信息学发现量子纠缠事件
505805
ass_wecan楼主2022/10/12 23:52

如果你是一个普及选手且做过这道题那你可以看懂:

if(x>2305447){
		x-=2305447;
		int _400_year_round=x/(400*365+24*4+1),end_month;
		int year=1600+_400_year_round*400;
		x-=_400_year_round*400;
		for(register int i=year;;++i){
			int minus=check_run(i)?366:365;
			if(x<=minus){
				for(register int j=1;j<=12;++j){
					if(check_run(i) && j==2){
						if(x>29)	x-=29;
						else{
							end_month=j;
							break;
						}
					}
					else{
						if(x>julian_month[j])	x-=julian_month[j];
						else{
							end_month=j;
							break;
						}
					}
				}
				cout<<x<<' '<<end_month<<' '<<i<<endl;
				return ;
			}
			else	x-=minus;
		}
	}

看不懂这是在干什么也可以在后面找到答案

楼主现在这份代码还没有调出来,这里出了bug。当然不求广大万能网友调题,因为模拟题不会有人帮调,只是他有了一个新发现想告诉大家:

将这一行

for(register int i=year;;++i)

改为

for(register int i=year;i<=year+400;++i)

将会影响前面 BC 的结果!!!

如果你想看楼主神奇的整份代码可以在这里观看

大致意思其实就是大力分讨,当r在我计算好的范围内,我会将前面的BC(公元前)优先处理。

然而现在这一段代码是计算从1600.1.1开始的往后每400年的循环,这时的r是所有情况中最大的。所以肯定是不影响之前的讨论情况的(虽然显然但问题就出在了这里)

这一段for循环的意思就是:当前剩余的日子已经无法支撑400年的循环,就开始一年年的找,所以按照代码的理解,year->year+400和year->INF 是一个意思。

但是呢,当楼主将后者改成前者之后,再查看下好的第五个样例点,居然神奇的发现有些公元前的日期产生了变化。也就是后面的修改影响了之前的结果,一个改变,另一个之前已经发生过的东西也发生了改变,这不是量子纠缠是什么!

聪明的你,能帮楼主验证这个伟大猜想吗?

2022/10/12 23:52
加载中...