2016.07.16【初中部 NOIP提高组 】模拟赛C

题目:https://jzoj.net/senior/#contest/home/1753


T1:大大的水题。只要能读懂题目,明白符号的意思,照题目要求你做的模拟就行了。


T2:听说可以用堆,但听得并不是很明白,所以就讲一下考试时的方法。我是用二分,考试时却因为r的边界被坑了10分。。

正解:二分当前的最短时间t,那么烘衣机也可以用t时间,然后判断当前第i个衣服如果在第t时间内不能自己烘干,则用烘衣机烘——判断烘衣机烘需要烘几次,然后判断烘这么多次是否总数可以在t时间内完成。


T3:两种方法:

第一种:二分当前第i头牛往顺时针选mid个,然后如果顺时针选Mid个大于剩下的数的总和的话,则把r改小,否则把L改大,然后l,r是l+1

第二种:用队列的方法。每次选第i个数,然后如果选了第i个数之后大于总和/2则把队首抽出,以此类推,每次选第i个数的时候都判断当前的最优情况即可。


T4:看数据很明显是O(n)或O(nlogn)之类的方法,但现在已知解法竟是O(n²)的。难道O(10000000000)会对?没错,只要从后往前搜,加些小优化,O(1000000000000000)都可以对(Ps:实际上O(n³)并没有O(1000000000000000)这么多)


正解:从后往前枚举终点的位置,并且记录当前从后往前搜的最小值(用min来维护),如果当前选第i个数为起点时,第i个数是当前所有位置的最小值则记录ans,并更新min,否则什么都不做。(PS:小优化就是如果当前第i个数大于终点就退出)

你可能感兴趣的:(比赛题解,模拟,二分)