为什么要用 i-L 去判断队列的末尾呢?
查看原帖
为什么要用 i-L 去判断队列的末尾呢?
385781
guanjinquan楼主2021/7/18 16:54

数据测试后才发现的

我本来写的是使用 i-L+1 去判别新加入的点是不是使得某些点上凸,但是死活不对,发现题解是用 i-L 来判别的。


然后我偷偷去udebug拿了几组数据来测试,发现有这么一组数据:

1
170 71
01001101100100010000110011010110100110111101001001000101010100000010111101111000000111010011100010101100110100110001001110000000001011011000000100110110110000111101110000

结果因该是: 21 93 ,但是我输出是 2 77


不甘啊,所以又输出了队列维护答案的过程,发现 i = 71~74 这个过程是和正解一样的,问题出在 i = 75 之后。 i = 75时,正解的队列里面只剩下 5 这个元素了,但是如果使用 i-L+1 去判别的话,就会剩下 2 4 5 这三个元素。


那么我就去画一下图,发现 2 4 5 这 3 个节点,根本就没有上凸啊!!!wtm,这绝对不是使用 i-L+1 维护下凸出错呀,这的确是下凸的,那为什么答案会错呢?

而且在 i = 75 时,明显k575k_{5-75} 是最大的呀,我谔谔,然后之后队列就一直卡在节点 2 这里了,所以答案输出: 2 77 。。。

k(1, 75) = 0.466667
k(2, 75) = 0.472973
k(3, 75) = 0.465753
k(4, 75) = 0.472222
k(5, 75) = 0.478873
k(6, 75) = 0.471429

!!!!明明2 4 5 没有上凸!!!

蒟蒻我太傻了,求聚聚们胶胶我把!!!!

2021/7/18 16:54
加载中...