秦皇岛集训,ACM比赛第一场

游记

      来到秦皇岛这个城市,带给我的东西真的很美好,不仅仅拘留于海滩边无尽的渤海,更给我带来新鲜感的是,这里教的东西。今天上午是开营仪式,主要介绍了安全事项,并且针对“如何学算法”,“为什么学算法”和“遇到不会的题该怎么办”三个问题展开介绍。这个过程中,我学到了很多东西,也为迷茫不知如何前行的我指明了一条“学算法”的道路。

正题

      与其更有意义的是今天的题目。

      我们的安排是早上讲算法,下午5小时ACM,晚上讲题+做回不会的题目。

      今天的题目有6题可做(共有11题),好吧是我太菜。。。

A题:

      说的是小恬要过生日了,小明要给她的蛋糕插蜡烛,一共有n根蜡烛,m个位置。但是每一根蜡烛必须插在Ai这个位置或则Bi这个位置,假如一个位置上的蜡烛数一共有x根,那么所需时间就是x^2,最后总时间就是所有位置的总和,输出最小时间。

      n,m<=50.

      我们队肝了好久的贪心,一共算下来有6,7种贪法,但是都不对。

      正解:最小费用最大流,利用“费用”的概念和网络流的反悔性质来进行选择。

      建图:从begin向每一根蜡烛建一条流量为1,费用为0的边,控制每一根蜡烛只用一次,同时,每一个位置向end连n条边,流量都为1,费用依次是1,3,5,7,9....因为前i项的前缀和恰好就等于i^2所以可以这样建。中间的边,就是直接每个蜡烛向自己的Ai和Bi连一条流量为1,费用为0的边。

B题: 

      这题说的就是,有一个n*n的矩阵,有很多的操作,分别是把某一列或者某一行都加上1,得出一个最终的矩阵,但是中间有一位是空的,要你求这一位是多少。

      其实这题nm可以做,模拟做两遍,暴力取即可。

      但是大佬的做法更妙。

      

      如上图,ab,cd在同一行,ac,bd在同一行。

      假如ab这一行加x,cd这一行加y,ac这一列加q,bd这一列加z。

      那么a加了x+q,d加了y+z,b加了x+z,c加了y+q。

      容易发现a+d == b+c

      所以我们现在已经知道了其中的三个,求另外一个也是很简单的事情。

C题:

      给出n个数字1到n,要你排列成一个环,使得相邻两个数互质的对数最大。

      这是一道大水题,直接构造一个1排列到n的环即可,因为相邻两个数互质,1与任何数互质,所以输入n,输出n。

D题:

       有两个属性a和b,每天你可以让a涨一点或者让b涨一点。

       有n个奖励,每个奖励有三个变量xi,yi,ci,表示a达到xi,b达到yi时,在接下来的每一天会得到ci的奖励。

       为m天以后得到的最大分数。(n<=1000 , m<=2000000000)(xi , yi , ci <= 1000000000)

       这道题是Dp,用 f[i][j] 来记录 a属性 达到 第i小的a , b属性 达到 第j小的b 。

       因为这里的xi,yi是1e9,所以要离散化,中间的状态没有用。

      然后枚举每一对i,j。他可以从f[i-1][j]加上((a[i-1],b[j])所获得的奖励*(a[i]-a[i-1])(已排好序))  和  f[i][j-1]加上((a[i-1],b[j])所获得的奖励*(b[j]-b[j-1])(已排好序))转移过来,两者中取最大。

      最后枚举i+j等于m即可。

      时间复杂度nm。

E题:

      X王国有n位官员,编号从1到n。国王是1号官员。除了国王以外,每个官员都有一个上司。我们称这个官员是这个上司的下属。上司的编号总比下属小。我们定义一个官员的影响力为他所有下属的影响力之和再加1。例如,一个没有下属的官员的影响力是1。国王的影响力总是n。任何一位有下属的官员总是选择他的下属中影响力最高的作为他的心腹(有若干下属影响力相同的话则会选择编号最小的)。一位官员得到一条消息后,他就要把消息传达给国王。我们定义一位官员的花费为他将消息传达给国王的花费。国王自己的花费为0。如果一位官员是他上司的心腹,则他的花费等于他上司的花费,否则他的花费为他上司的花费加1。由于时代和平,消息并不需要传递的太快。我们希望你决定每位官员(除了国王)的上司,使得所有官员的花费之和尽量小。

      关于这题我有一个想法,就是贪心,每次把剩下的节点fe分成两半,来进行深搜求解,On就行了。

      但是正解不是这样的。是暴力树形Dp,对于每棵树剩下的节点,枚举左子树的大小j,再用总的节点x-j-1来得出右子树的大小。在不断往下递归,返回的时候,我们只需要用左子树的价值+右子树的价值,加上这个点的价值就行了。(传两个参数,位置和到这个点的价值)。

F题:

      平面上有n座山,每座山都有左右两面,第i座山的高度为ai,现在弱弱在第一座山的左边山脚下(高度为0),他想要依此爬过这些山,到达第n座山的右边山脚下。除了简单的爬上爬下,还有一种特殊操作。如果弱弱目前在第i座山右面的海拔x的位置,且第j(i < j)座山的海拔大于等于x,且第i + 1, …, j - 1座山中没有一座山的海拔高于x,那么他可以使用绳索滑到第j座山左面海拔x的位置。弱弱想找到一种方式,使得他在行程中海拔变化的幅度最小。请输出最小幅度。

      这题找找规律就可以发现,每次只需要爬上最高的山,再爬下来就是最优解,所以这题就是给出一个序列,求max*2. 

G题:

      黄YY是一个清明梦超能力者,同时也是一个记忆大师。他能够轻松控制自己在梦中的一切,在醒来之后还能清晰的记得梦中所有的细节,这让他的朋友们都十分羡慕。又是一个晚上,黄YY又到了自己的梦中,并且随手造出了一棵有n个点的树,树上每个点有一个初始颜色0。为了让这棵树不那么单调,黄YY拿起了画笔在上面尽情上色。每一次上色可以用u, v, c来描述,代表黄YY把u, v这条路径上的点都染色成了c。正当黄YY开心的完成了m次染色,准备在早上醒来之时向朋友们炫耀。但现实中的黄YY由于过于兴奋滚到了床下,撞到了脑袋,在剧痛中醒来。由于脑部受到了严重创伤,黄YY对刚才梦境中发生的一切发生了严重的信息丢失。但英俊潇洒的黄YY当然不希望自己的窘态被朋友们发现。为了证明自己还是那个清明梦超能力者,他希望告诉朋友们自己上色后每个节点的颜色。同时为了更进一步证明他还是个记忆大师,他希望干脆直接说出每个点在倒数第k次染色时的颜色。当然,现在的黄YY已经成了弱智了,作为黄YY最亲密的朋友,你快来帮帮黄YY吧!

      给出一棵n个点的树,给出m个操作,求每一个点被染的倒数第k种颜色。

      一开始看到这道题的时候就直接想到用树剖+线段树来进行维护。但是在打lazy的时候很麻烦,因为不能O1下传标记。

      所以我们可以先算出一个节点被染了多少次,然后在它取第x-k+1次的时候记录答案就可以了(x是被染了多少次),关于线段树的维护,你可以直接维护一个min,表示该子树维护的点中x最小是多少,每次更新。然后对于当前lazy>=min,就可一下去丢标记。。。

      其他的题算法没学过,而且讲的时候也是一笔带过,就先放一放,等集训完再继续做。

总结

      今天总体发挥有点不好吧,rank34/180,将来再继续努力,加油!!

猜你喜欢

转载自blog.csdn.net/Deep_Kevin/article/details/81369412