NOIP模拟赛-2018.11.7

时间:2022-06-11 20:45:08

NOIP模拟赛  

  如果用命令行编译程序可以发现没加头文件之类的错误。

  如果用命令行编译程序可以发现没加头文件之类的错误。

  如果用命令行编译程序可以发现没加头文件之类的错误。

  编译之前另存一份,听说如果敲错文件名可能把文件给编译消失了,所以不要考试到最后再试这个。

  T1:一道有点考察$bfs$性质的题,给定一些黑点,一些白点,黑点每步会往四联通的格子扩展一步,问每个白点最早被扩展到是什么时候.

  一次性把所有黑点都放进队列里面$bfs$即可.

  T2:给定一个长度为$n$的序列,其中有的数未知,每个数的范围是$1-k$,最小化原序列的逆序对数量.$n<=10^5,k<=50$.

  考场上不知道在想什么...好像是觉得正解肯定想不到,就一直在打暴力和奇怪的骗分,甚至没有想一想正解可能是什么样的,不过这并不是非常重要,因为我$CE$了!在五种骗分中有一个是依赖于随机化的,但是我没有调用随机种子的头文件,而神奇的$dev$竟然把它编译过去了...?后来尝试了一下用命令行编译,是可以发现编译不通过的,以后写完程序可以先拿命令行编译看看。如果编译不通过是非常可惜的。

  五种贪心似乎也没有帮我得到多少分...

  1.找到前面最近的已知数,跟它填一样的;

  2.找到后面最近的已知数,跟它填一样的;

  3.找到前后最近的已知数,取平均值填;

  4.枚举每个空位置填什么,看一下能和多少已经填好的数或者已知数构成逆序对,取最小的一个来填;

  5.以上四种方法每种运行完后,随机$1000$次,每次找到一个未知数随机将它加一或减一;

  看起来前三种是真的乱搞,后两种还算有点道理,然而第四个给我送$CE$,改过来后第五个让我$TLE$

  还有一些特判:如果所有的数都要填,那肯定可以填出一个没有逆序对的数列,如果只有一个已知数,同上.

  正解是这样的:首先发现填的数是非降的,可以推理一下,也可以认为本来填数就有多种可能,不需要选额外制造逆序对的做法,这样就很好做了,记录一个前缀最小值优化$dp$转移即可.

  

  T3:

  $n$个选手,$m$个测试点,现在知道每个人能通过哪些测试点,要求将测试点进行捆绑测试使得总得分最小.捆绑后只要有一个不通过就算不通过,否则得分为每个点的分数和.询问一共捆绑$[1,k]$部分的最小得分.

  一个比较显然的做法:$dp[i][j]$表示前$i$个部分捆绑成$j$个的最小得分,可以得$60$.

  题解做法还没看懂...

  ---shzr