Codeforces
文章平均质量分 59
四毛拽根
点击查看
展开
-
CF1478C Nezzar and Symmetric Array
题目链接题目大意:定义一个长2∗n2*n2∗n且每个元素都不同的数组aaa,对于每个i都可以找到一个jjj,使得ai=−aja_{i}=-a_{j}ai=−aj。又定义d[i]=∑j=12n∣ai−aj∣d[i]=\sum_{j=1}^{2n}\left | a_{i}-a_{j} \right |d[i]=∑j=12n∣ai−aj∣,现在给出ddd数组,问可否构造出aaa数组。题目分析:容易看出,d数组必须有两个相同的元素,因为ddd的定义中有绝对值,所以aia_{i}ai和−ai-原创 2021-08-04 17:36:14 · 160 阅读 · 0 评论 -
CF1498C Planar Reflections
题目链接明明没那么难,也不知道为什么做了这么长时间,吐了题目大意:如上图所示:一个能量为kkk的粒子,射入有nnn个反射板的空间,粒子每经过一个反射板,会有一个k−1k-1k−1能量的粒子被反射,当然k=1k=1k=1的时候,就不会反射出粒子。问最后可以有多少个粒子,答案对1e9+71e9+71e9+7取模。题目分析:这个是不能在多组输入前预处理出来的,因为nnn和kkk都相互牵制。题目给出的范围正好是可以让我们进行O(n∗k)O(n*k)O(n∗k)的dpdpdp的。用dp[k][n]dp[原创 2021-08-04 10:22:41 · 204 阅读 · 0 评论 -
CF1513C Add One
题目链接题目大意:称“将一个数上每一位的值+1”为一次操作,例如对于9393进行一次操作后的结果为104104。输入n,m,输出对n进行m次操作的结果。题目分析:很容易发现数字的每个位置上互不影响,所以可以分开单独考虑。转移方程为dp[j][i]=dp[j+1][i−1]dp[j][i] = dp[j + 1][i - 1]dp[j][i]=dp[j+1][i−1],dp[j][i]dp[j][i]dp[j][i]表示数字j:0 8j:0~8j:0 8进行了iii次后的位数。特原创 2021-08-03 21:03:24 · 219 阅读 · 0 评论 -
Parsa‘s Humongous Tree
题目链接题目大意:给出一个树,每个节点都会有一个权值范围,让你找到一中赋值权值的方案,使 ∑(u,v)∈E∣au−av∣\sum_{\left ( u,v \right )\in E}^{}\left | a_{u} - a_{v} \right |∑(u,v)∈E∣au−av∣最大。输出最大值。题目分析:假设根节点的孩子都赋值了合适的权值,要使根节点距离每个子节点最大,那么需要使根节点距离子节点的中位数最远,那么不是在l上取,就是在r上取。所以我们就可以用dp[i][1/0],1表示在r上原创 2021-08-03 10:12:36 · 5536 阅读 · 0 评论 -
K. Lonely Numbers
题目链接1600的题,不难,稍微一推就可以。题目大意:gcd(a,b),agcd(a,b),bgcd(a,b)gcd(a,b),\frac{a}{gcd(a,b)},\frac{b}{gcd(a,b)}gcd(a,b),gcd(a,b)a,gcd(a,b)b,如果这样的三个数可以作为三角形的边长(能看到这题,不可能有人不知道三个数可以组成三角形边长的条件是什么吧),那么a,b就是不孤独的数字,让你找出1—n中,孤独的数字的个数。分析:t组数据,t和n的范围都是1e6,所以需要预处理出来,然后原创 2021-05-31 21:15:25 · 222 阅读 · 0 评论 -
D. Genius‘s Gambit
题目链接标签是1900的数学构造题,感觉这个题不是很值这个分数。题目大意:给出a,b,k,问是否可以构造出两个满足以下条件的数x,y:x,y的二进制数都有a个0,b个1.x - y的二进制恰好有k个1可以的话输出,不可以就输出No。可以构造出11∗∗∗∗0∗∗\mathbf{11****0**}11∗∗∗∗0∗∗10∗∗∗∗1∗∗\mathbf{10****1**}10∗∗∗∗1∗∗*表示该位置的数相同。这样构造出x - y的二进制数最多可以有a + b - 2个1。这样也判断出原创 2021-05-26 21:27:25 · 165 阅读 · 0 评论 -
E. Arranging The Sheep
题目链接1400的 div 3 E题,难度不大。题目大意:给出一个字符串,“ * ” 表示羊," . "是空地。让你用最小的操作数把所有的羊排成一排。每次操作可以让一只羊左移或者右移(当然前提是移动到的地方是空地)。分析:题目题意好理解,思路也不难,稍微一推就出来了。可以设排好序的第一个位置是x,第二个位置就是x + 1… 并且每只羊不能越过另一只样。所以有了初始位置和末尾位置就可以列出来式子:(以sample1为例:**.*…)...原创 2021-05-26 19:58:35 · 145 阅读 · 0 评论 -
D. Maximum Sum of Products(dp)
最近在cf上刷math的题,这道题感觉挺好,1600的题。题目链接题目大意:给出n的长度的a,b两数组,你可以至多一次的反转a的子数组,使得∑i=1nai∗bi\displaystyle\sum_{i=1}^{n} a_i*b_ii=1∑nai∗bi最大化。分析:n的范围是5000,可以开个二维dp,第一维表示反转的子数组的初始下标,第二维表示子数组的长度(也可以直接表示子数组的末尾下标,目前先按照我当时敲的代码来讲,两者的效果是一样的),dp的值表示子串反转后,在这个子串对应的区间内的a原创 2021-05-25 17:55:21 · 242 阅读 · 0 评论 -
CF166E Tetrahedron
题目链接小dp:fi 表示走了i步,位置在原点的方案数,gi 表示走了i步,位置不在原点的方案数。所以fi = 3 * gi-1,gi = fi-1 + 2 * gi-1。code:#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include &原创 2021-05-22 12:42:58 · 229 阅读 · 0 评论 -
CF2B The least round way
题目链接sample:input:31 2 34 5 67 8 9output:0DDRR分析:题目没有说是输入范围在1 — n * n 的数,数的范围是到0 —109 。所以,就算找到一条合适的路径,直接把路径上的数相乘,判断末尾0的个数,这种方法是绝对行不通的。我们知道,只有是2的倍数和5的倍数相乘,才可以出现末尾0,所以我们计算答案的末尾0的个数,就是看这个数中有多少对<2,5>,并让其最小。众所周知,当其中一个数的数量最小的时候,另外一个数的数量不管多大都不原创 2021-05-17 21:42:40 · 154 阅读 · 0 评论 -
CF25D Roads not only in Berland
题目链接样例输入1:21 2输出1:0样例输入2:71 22 33 14 55 66 7输出2:13 1 3 7分析:并查集code:#include <algorithm>#include <bitset>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <de原创 2021-05-21 20:43:34 · 147 阅读 · 0 评论 -
Codeforces Round #707 (Div. 2)C.Going Home (鸽巢原理)
题目链接样例:Sample1:62 1 5 2 7 4YES2 3 1 6Sample2:51 3 1 9 20NO题目大意:给出n个数字,求满足ax + ay = az + aw,(x,y,z,w不相同) 的一组数的下标。找不到就输出NO。思路:因为ai 的范围是[1,2.5 * 106],所以ax + ay = az + aw 的范围是[2,5 * 106] ,而某个数(这里表示的是每个1~n 的ai与1~n 的aj 的加和,i != j)在此范围内出现四次则必原创 2021-05-10 21:52:28 · 160 阅读 · 0 评论 -
Codeforces Round #694 (Div. 2)
A. Strange Partition题目链接题意:给定含 n 个元素的数组 a 和一个整数 x ,你可以将数组中任意相邻数组合并,试让你求出 ∑ki=1[a[i]/x] (向上取整) 的最大值与最小值。解析:因为求和为向上取整求和,我们知道,当一个数不被一个数整数的时候,所得的值会比应得的值大。比如5/2=2,但是向上取整后答案为3,。所以我们想要求其和最大,我们就要让数组中不能整除x的数最多,反之,值最小,就是让数组中能整除x的数最多。我们知道:能被整除的数 + 能被整除的数 = 能被原创 2021-01-19 10:46:06 · 135 阅读 · 0 评论