Difference between revisions of "2011-2012 ACM-ICPC Northeastern European Regional Contest (NEERC 11)"

From EOJ Wiki
Jump to navigation Jump to search
 
Line 95: Line 95:
 
题意:有一座桥,从左往右有$n_1$条路,从右往左$n_2$条路,有一条路为待定。即早上有$(n_1+1)$条从左往右,晚上有$(n_2+1)$条从右往左,路改变方向需要等r个时刻。分别告诉你从1到m时刻的两个方向车数量。要求决定一个时刻改道路方向,使得所有车辆等待时间最小化。
 
题意:有一座桥,从左往右有$n_1$条路,从右往左$n_2$条路,有一条路为待定。即早上有$(n_1+1)$条从左往右,晚上有$(n_2+1)$条从右往左,路改变方向需要等r个时刻。分别告诉你从1到m时刻的两个方向车数量。要求决定一个时刻改道路方向,使得所有车辆等待时间最小化。
  
题解:左往右与右往左是两个独立的问题,设$f[i]$表示i时刻开始左从右车道减少一条的答案。容易发现$f[i]$与$f[i + 1]$是有关系的。所以线性计算。首先计算出来$f[m+1]$即从左往右都是$(n_1+1)$,来开始减少车道。若从$(n_1+1)$减少到$n_1$,如果原来该时刻通过车辆少于$(n_1+1)$,那么什么都不做。否则说明有一辆车此时通过不了,需要找到后面最早有空余车道的时刻让其通过,这个只需要队列记录一下。所以可以$O(1)$转移。
+
题解:左往右与右往左是两个独立的问题,设$f[i]$表示i时刻开始左从右车道减少一条的答案。容易发现$f[i]$与$f[i + 1]$是有关系的。所以线性计算。首先计算出来$f[m+1]$即从左往右都是$(n_1+1)$,来开始减少车道。若从$(n_1+1)$减少到$n_1$,如果原来该时刻通过车辆少于$(n_1+1)$,那么什么都不做。否则说明有一辆车此时通过不了,需要找到后面最早有空余车道的时刻让其通过,这个只需要队列记录一下。所以可以$O(1)$转移。同理从右往左。

Latest revision as of 05:38, 31 August 2018

NEERC 11

Problem A

Solved by dreamcloud. 00:22

题意:签到题,求"/"和"\"围成的面积

题解:"/","\",表示面积为0.5。".",表示面积为1。每一行斜杠个数一定是偶数,那么第奇数和偶数斜杠之间的"."一定在多边形之内

Problem B

Solved by oxx1108. 00:42

题意:给小于$m$的数二进制编码,要求满足一堆性质的情况下用的数字最少。

题解:签到题,读懂题就会做了。

Problem C

Solved by Xiejiadong & oxx1108. 04:26(+1)

题意:给出每一个字母的点阵,求讲一个句子点阵变换成另一个句子的点阵最少需要几步。

题解:暴力预处理每一个字母在每一个位置为开始的最少需要改变多少的点阵位置。

然后就是跑dp,$f[i][j]$表示新句子的前$i$个字母,填到第$j$列最少需要改变的次数,暴力转移即可。

这道题目的输入非常繁琐,oxx完成了最复杂的一块;Xiejiadong写了最简单的dp一块,还写挂了,请来了oxx debug,发现了第一个字母前面空格个数不限的坑点。

Problem D

Solved by Xiejiadong. 01:12(+1)

题意:可以将两个字符串首位相接,或者取单个字符串,求本质不同的字符串有几个。

题解:用Trie树来跑,按照前缀和后缀分别构建Trie树,显然这样做是会重复的。而重复的一段必然是由于中间段相同所引起的。那么我们可以处理前缀的后缀和后缀的前缀相同的个数,来去重,类似于容斥。

Problem E

Solved by dreamcloud. 02:35(+1)

题意:签到题,给一些人,给你他们的家谱,问你他们的母系DNA是否一样。

题解:读懂题目是个很复杂的事情,只需要并查集。

Problem F

Unsolved.

Problem G

Solved by Xiejiadong. 02:25

题意:猜一个$1-n$之间的数,你每次给出一个猜的数,他会告诉你和答案$gcd$的结果,求这样猜,在最坏情况下,最多要猜几次。

题解:显然最坏情况下便是,让你猜的数是$1$,那么你需要猜遍所有的质数才可以猜到他。而质数是可以一起猜的,比如猜$2$、$3$,我们可以猜$2*3$。

也就是说,我们要尽可能把素数组合在一起,使得组数最小,而且每一组素数的乘积都$\le n$。

我们可以采用贪心的做法:每次取一个当前最大的数,然后用尽可能多的最小的数去和他凑在一起,组成一组。

直观上感觉出来的,不会证明。

Problem H

Unsolved.

Problem I

Solved by oxx1108. 01:27

题意:交互题,猜全排列,每次告诉你猜的序列与答案序列的最长子序列(不连续),要求在$5n^2$次数以下猜出来。

题解:从1开始枚举每个数的位置(其他数相对位置不变),那么答案只可能$\pm1$或者不变,当$+1$的时候说明放到了恰当的位置,则可以继续枚举下一个数,若不存在则这个数原来一定已经在最长子序列中则不需要修改,上限$n^2$次。

Problem J

Unsolve.

Problem K

Solved Xiejiadong. 00:51

题意:给出一棵树,任意去掉一条边,求至少需要几条边,可以保证联通。

题解:按照叶子的dfs序劈成两半,依次连边。如果是奇数的话,把最中间的两个点连起来即可。

Problem L

Upsolved by dreamcloud

题意:有一座桥,从左往右有$n_1$条路,从右往左$n_2$条路,有一条路为待定。即早上有$(n_1+1)$条从左往右,晚上有$(n_2+1)$条从右往左,路改变方向需要等r个时刻。分别告诉你从1到m时刻的两个方向车数量。要求决定一个时刻改道路方向,使得所有车辆等待时间最小化。

题解:左往右与右往左是两个独立的问题,设$f[i]$表示i时刻开始左从右车道减少一条的答案。容易发现$f[i]$与$f[i + 1]$是有关系的。所以线性计算。首先计算出来$f[m+1]$即从左往右都是$(n_1+1)$,来开始减少车道。若从$(n_1+1)$减少到$n_1$,如果原来该时刻通过车辆少于$(n_1+1)$,那么什么都不做。否则说明有一辆车此时通过不了,需要找到后面最早有空余车道的时刻让其通过,这个只需要队列记录一下。所以可以$O(1)$转移。同理从右往左。