Codeforces Round #379(div 2)

A、B:=w=

C:

  题意:

      你需要制作n瓶药水,每一瓶药水需要x秒。

      你现在有m种A魔法,花费b[i],使得每一瓶药水的花费代价降为a[i],只能用一次。

      有K种B魔法,花费d[i],使得瞬间制作好c[i]瓶药水,只能用一次。

      你最多花费s的魔法值

      问你最快完成要多少秒。

  分析:题目所给的B魔法都是递增的,容易想到枚举用哪个A魔法,二分对应的B魔法,因为在MP充足的情况下,减少的药水越多对ans越有利

D:

  题意:一个无限大的平面,给你一个King的位置,再给你其他棋子的位置,问你这个King是不是正在被人将军。一共三种棋子R B Q,R只能够直走,B只能斜走,Q能斜走也能直走,但它们都无法跳子

  分析:记录下King的八个方向离其最近的点,根据属性判断是否被将军。

E:

  题意:给你一棵树,每个树上的节点要么是1,要么是0,每次操作你可以指定任何一个节点,然后使得这个节点周围的同色连通块变色。问你最少花费多少次,使得整个树都是一个颜色。

  分析:首先肯定先缩一波点,然后就成了一颗树,这棵树是黑点、白点相间的。

     如果正好是个链,那么我们可以每次从中间点开始变色,答案就是len/2

     对于一般的树而言,考察树的最长链,其他的树边看作挂在链周围,那么发现我们如果也是每次从中间点开始变色,那么len/2操作后所有的点都成了同一颜色。

       所以ans=树的直径/2

F:

  题意:bi=(ai&a1)+(ai&a2)+...+(ai&an),ci=(ai|a1)+(ai|a2)+...+(ai|an),n<=2e5,给定数组b和c,求数组a,如果不存在则输出-1

  分析:有一个非常厉害的性质,(a&b)+(a|b)=a+b,所以想到把这些方程加一加,发现可以很简单的定出a数组的值,但是这只是说明a满足每个bi+ci,并不能说明满足每个bi和ci,于是还要判定a是否正确。

       简单的判定是n^2的,TLE

     从每个二进制位考虑,如果a[i]的第j位是1,那么b[i]的第j位就是a1...an每个的第j位的和,c[i]的第j位就是n个1(均不考虑进位)

               如果a[i]的第j位是0,那么b[i]的第j位就是0,c[i]的第j位就是a1...an每个第j位的和

     很明显我们可以预处理出a1...an每个位置上的数字和。

     判定的复杂度是O(nlogn)   

posted @ 2016-11-16 21:38  Chellyutaha  阅读(175)  评论(0编辑  收藏  举报