首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Codeforces Round #168 (Div. 二)

2013-02-24 
Codeforces Round #168 (Div. 2)这次比赛出了A,C两题,B题给跪了,犯了一个小小的错误。B我是这么做的,枚举每

Codeforces Round #168 (Div. 2)

这次比赛出了A,C两题,B题给跪了,犯了一个小小的错误。

B

我是这么做的,枚举每个黑格子,然后暴力走4个直角,统计找到的点的个数,当个数不等于总个数就是NO,遍历所有情况没有NO就是YES。

code


C

假如倍数是2,   并有序列2,4,8,16...... 这个数列的总个数为n, 很容易得出我们最多只能取n - n/2个数,即有n/2个不能选。

因此我们只要找到所有公比为倍数(K)的等比数列(这个等比数列必须保证取得长度最长), 每次剔除不能选的个数, 最后剩下的就是答案。

可以用set实现,代码比较短。

code


D

以1为根节点,根据题意约束,我们发现清零的方向必须是要从树的叶子往上到根节点。

我们先分析深度为2的树, 树的根为1。 求清除其孩子节点的最小次数的方法是:  先找到其孩子中所有负数的最小值X 和 所有正数的最大值Y, 则最小加1 次数为X, 最小减1 次数为Y 。

根据上述结论,我们可以从下往上逐步清零子树即可。

我们让数组a[u], b[u]表示让   以u为根的子树的所有节点都清零  所需要的加1和减1操作的次数。

具体清零子树u时,先清除其孩子节点,再清除u节点。

code


E

几何题,正在努力

热点排行