解释为什么有人性质二会全挂(luogu分值75~90,不是因为inf开小了!)
查看原帖
解释为什么有人性质二会全挂(luogu分值75~90,不是因为inf开小了!)
258050
Tom22l楼主2022/11/2 15:05

本人同经历,经过长时间模拟查错,终于发现了问题!


不是数组开小了,数据没有问题; 只挂性质二的友友们看看你们求完区间返回值之后的判断是不是有类似这样一行:(为了方便理解直接写伪代码哩)

if 第二个人既有正值又有负值{
	if 第一个人没有0{
		printf("%lld\n",max(第一个绝对值最小的负数*第二个人最大的正数,第二个绝对值最大的负数*第一个人最小的正数));
	}
	else ...
}

如果有,那你就是这里出问题啦! 因为!你没有判断第一个人是否存在正(负)数! 举个例子:

1 2 1
214597568
-14848432 1
1 1 1 2

正确答案:

-3186437395813376

你的答案:

-inf(即你定义的最大值)

因为正常来说你的最小绝对值在没有定义的情况下都会被你定义为inf!而-inf明显大于正确答案! 所以! 你要把上面的改成:

if(a1.exist0) 
    printf("%lld\n",0);
else if(!a1.zheng) 
    printf("%lld\n",a1.fuzuixiao*a2.zhengzuida);
else if(!a1.fu) 
    printf("%lld\n",a1.zhengzuixiao*a2.fuzuida);
else 
    printf("%lld\n",max(a1.fuzuixiao*a2.zhengzuida,a1.zhengzuixiao*a2.fuzuida));

希望对跟我一样还在焦虑为什么性质2挂了的友友们有帮助(^-^)!


p.s.发现不是只有性质2会挂欸(只是挂的可能性更大),剩下点也可能会挂!:(
更焦虑了555……

2022/11/2 15:05
加载中...