Codeforces Round #480 (Div. 2) C 贪心 D 数字、思维 E 树上倍增

Codeforces Round #480 (Div. 2)

C. Posterized

题意:
给出 n 个数,都是区间 [0,255] 内的数,要你把 [0,255] 划分成多个长度 <=k 的不重叠的子区间。每个数必须包含在一个子区间内,且这个数的价值是这个子区间的左端点。要你输出这 n 数的价值,且这 n 个价值字典序要最小。
tags:
首先很明显字典序最小,那对于第 i 个数 p[i] 定它的区间时,左端点肯定要尽可能小。所以我们直接枚举区间 [ p[i]-k+1, p[i] ] 定左端点 l ,要这个区间内最大的后缀且没有被占用,即 [l, p[i]] 内的数都没被占用。
至于右端点,我们暂时就定在 p[i] 位置。
然后因为 l-1 位置肯定是另一个区间占用了,这时我们可以看看能否合并,即 l-1 位置的区间的左端点如果能拓展到 p[i] 位置,那么区间 [l, p[i]] 都可以合并到 l-1 位置的区间内。
代码:http://codeforces.com/contest/980/submission/38071053

D. Perfect Groups

题意:
给出 n (n<=5000) 个数(-1e8~1e8)。
先定义一个区间的价值为:这个区间内的数最少可以分成多少个集合,要求每个集合里的数两两相乘的积是完全平方数。
输出有多少个子区间的价值分别为 1、2、3、........ n 。
tags:
首先我们可以得到一个结论: 如果 a*b 和 a*c 都是完全平方数 ,那么 b*c 也是完全平方数。具体的可以分解质因子证明。
所以一个区间内的数要按题目要求划分成集合,那么集合之间肯定是不相交的。
这样的话,我们只要对于每个数定一下它包含在哪个集合里, 然后 O(n*2) 枚举一下区间,然后看区间有多少个集合就行,注意 0 要特殊修理。
另外,对于两个数要判断它们的乘积是否是完全平方数,我们不能有 sqrt() 判断,会超时。这里我们可以一直除它的质因子的平方,最后就只会剩下奇数次幂的质因子相乘。然后排个序,最后剩下的数相同,那就表明原来的数相乘是完全平方数。
代码:http://codeforces.com/contest/980/submission/38073629

E. The Number Games

题意:
n 个点的一棵树,标号是 1~n ,每个点的权值是 2^i 。要你删除掉 k 个点,删除之后剩下的点还是一棵连通的树,且要求剩下的点权值和最大。输出要删除哪些点。
tags:
因为 2^i > 2^(i-1)+2^(i-2) ....... + 1 ,所以我们必须贪心尽可能取更大的点。
所以总体的思路是很明显的,要删掉 k 个点,也就是要取出 n-k 个点。假设当前已经取的点连成的树是 G ,那么从点 n 到点 1 枚举,如果当前枚举的点到 G 的路径长度 <= 当前能够取的数量,那这条路径上的点就都可以取。
具体算路径长度,用倍增可以解决。以点 n 为根结点,tr[i][j] 表示点 i 往上走了 2^j 个点后到达的点 。
代码:http://codeforces.com/contest/980/submission/38084425

原文地址:https://www.cnblogs.com/sbfhy/p/9019049.html

时间: 2024-10-07 08:33:27

Codeforces Round #480 (Div. 2) C 贪心 D 数字、思维 E 树上倍增的相关文章

Codeforces Round #401 (Div. 2) E 贪心,线段树

Codeforces Round #401 (Div. 2) A 循环节 B 暴力排一下 C 标记出来,但10^5,特耿直地码了个O(n^2)的上去,最气的是在最后3分钟的时候被叉== D 从后往前贪心暴糙一下就好.比赛时一眼瞄出来了不敢写,搞不懂这样竟然不会超时.. E. Hanoi Factory 题意:n个环体,内径a[i],外径b[i],高h[i].当 a[i+1]<b[i]<=b[i+1] 时,第 i 个环体可以堆在第 i+1个环体上.求可以堆出的最高高度. tags:佩服那些大佬,

Codeforces Round #480 (Div. 2) E. The Number Games

E. The Number Games time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output The nation of Panel holds an annual show called The Number Games, where each district in the nation will be represented

Codeforces Round #546 (Div. 2) D 贪心 + 思维

https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则,假如u在v相邻前面,那么u和v可以交换位置,问你是队列最后一个人的时候你最前可以换到前面哪里 题解 因为相邻才能换,所以最后一个换到前面一定是一步一步向前走,所以不存在还要向后走的情况 设最后一个为u,假设前面有一个能和u换位置的集合,那么需要将这些点尽量往后移动去接u 假设前面有一个不能和u换位置的集合S,

Codeforces Round #480 (Div. 2)

这是<2100参加div2 only制度的第一场 然而3大号都打不了(都>2200) 随便抓了只黑名小号来打 A 如果珍珠个数为0或串长约数即可 00:03:18 B 一开始脑子糊涂了 以为有的时候不行 还wa了一发 事实上 左下到右上等价于右上到左下 沿竖着的对称轴对称放障碍即可 00:16:38 C 贪心 00:27:11 D 把每个数除去所有平方因子 相同的一组 从n个点开始向右扫一遍统计即可 注意0放入任何其他组不不影响 00:37:20 E 我们考虑留下哪些数 k<n n号节点

Codeforces Round #547 (Div. 3) F 贪心 + 离散化

https://codeforces.com/contest/1141/problem/F2 题意 一个大小为n的数组a[],问最多有多少个不相交的区间和相等 题解 离散化用值来做,贪心选择较前的区间 代码 #include<bits/stdc++.h> #define M 5000005 #define ll long long #define pb push_back using namespace std; struct N{int l,r;N(int l=0,int r=0):l(l)

Codeforces Round #263 (Div. 2)C(贪心,联想到huffman算法)

数学家伯利亚在<怎样解题>里说过的解题步骤第二步就是迅速想到与该题有关的原型题.(积累的重要性!) 对于这道题,可以发现其实和huffman算法的思想很相似(可能出题人就是照着改编的).当然最后只是输出cost,就没必要建树什么的了.只要理解了huffman算法构造最优二叉树的思路,就按那么想就知道每个a[i]要加多少次了. 当然这道题没想到这些也可以找出规律的,就是一种贪心思想. #include<iostream> #include<cstdio> #include

Codeforces Round #228 (Div. 1) C 贪心

嘎嘎,今天被一些事耽误了,但是还是A了几个题目,这道题还不错 题目链接: 题意:两个人玩游戏,有N堆纸牌,纸牌上有数字,A每次只能取N堆中的 其中一个的顶部的 纸牌,B只能取N堆中的其中一个底部 的纸牌,A,B都想让自己取的和最大,问最后比分为多少 画了一下,如果某一堆里的 纸牌数量为偶数,发现其实是两个人各分一半,因为如果对方想从这里拿走本来属于自己那半部分的 较大的牌,自己完全来得及阻止的, 接下来就是奇数了,奇数 其实先手者就抢到了中间的一张牌,另外两半还是各自一半,所以 应该以每个奇数堆

Codeforces Round #257 (Div. 2)C 贪心

C. Jzzhu and Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Jzzhu has a big rectangular chocolate bar that consists of n?×?m unit squares. He wants to cut this bar exactly k time

【构造】Codeforces Round #480 (Div. 2) B. Marlin

题意:给你一个4*n的网格,保证n为奇数,让你在其中放k个障碍物,不能放在边界的格子上,使得从左上角走到右下角的最短路的方案数,恰好等于从左下角走到右上角的最短路的方案数. k为偶数时,以纵向为对称轴进行摆放即可. k为奇数且小于等于n-2时,如下图横向对称摆放: .........................#####.............. k等于n时,如下图: ..............#.........#..###########.............. k大于n时,在上