这个题有很多做法,目前先用二分+KMP过了,二分的原理是如果最大字串存在那么这个最大字串的字串也一定满足要求。难得1Y,明天用后缀数组尝试一下来填坑。。
[01分数规划][二分][精度][坑] POJ2976 Dropping tests
二分答案倒是容易想到,实现的话需要排序后贪心,但是坑在精度上
我用了printf(“%.0f\n”,ans); WA cout<<(int )(ans+0.5)<<endl; AC 就很玄学。。。。学到了学到了
继续阅读“[01分数规划][二分][精度][坑] POJ2976 Dropping tests”
[二分][贪心][比赛] 百度之星2018初赛(B) 1004 p1m2
哭了,真的是蠢,好多人三个题都前500了,我3个题吊车尾,感觉代码能力亟待提升。。。
二分答案,每次判断的时候用cnt记录遍历整个数组,比mid大的就cnt+=ar[i]-mid;小的就cnt+=mid-ar[i];这样其实算的是一个下限,也就是比他小的数都只加到了mid而没有多加,因为这样可以使得比mid大的那些,通过他们-2转移来的+1更好的利用,这样的话如果cnt<=0,那说明至少[mid,R]里仍然又满足要求的,所以应该往右边继续扩展,因为我们要求的是最大值!这里错了n发,就是没有搞清楚mid应该是靠右的而不是靠左emmmmmm。然后就是一开始想多了,上限下限都考虑了,后来才意识到要求的是最大值,只要下限可以操作就可以一直往右扩张。最后判断是否-1就是再把数组这样过一遍看看是不是cnt<=0,如果是的话说明是可以操作的(其实我很好奇怎么不可行。。 继续阅读“[二分][贪心][比赛] 百度之星2018初赛(B) 1004 p1m2”