Codeforces
文章平均质量分 76
记录Codeforces的比赛以及题目补题等等
Happig丶
我的孤独,虽败犹荣
展开
-
Codeforces 1741G. Kirill and Company(BFS/位运算/分组背包)
上述问题可以用分组背包解决,分组背包实际上解决的问题就是若干组物品,每组最多选出一个,使得不超过背包容量时价值之和最大。个人按位来表示,对于每个有车的人,求出有多少种二进制集合表示的方案,他可以带每种方案的人回家。没车,当枚举到状态(左边为最低位)“1110” 代表如果带前三个人搭车回家,能否将三个人都送回家,如下图所示。个人没有车,其他人都有车,没车的人可以搭顺风车回家,通过搭车安排使得。对于每个有车的人,求出有多少种二进制集合表示的方案后,问题变成了,个人中无法搭车走回家的人最少,求出这个最少的人数。原创 2022-10-25 14:53:53 · 675 阅读 · 1 评论 -
Codeforces1741 F. Multi-Colored Segments(离散化/multiset/差分)
采用的方法是将所有线段按颜色划分集合,对于每个集合考虑差分进行区间加法,这时每个点表示的是该点被多少不同颜色的线段覆盖,因为同色线段相交的部分是无用的,在差分前要先将进行。但是题目要求不同颜色才有效,考虑在查询时将所有和当前线段同颜色的都删掉,那么直接查询就可以了,当然删除的复杂度太大是不可取的。对于每个线段,需要求出距离它最近的一个和它不同颜色的线段,并输出其距离。,这时在X轴的负半轴出现了刚好对称的线段集,和上面思路一样再计算一遍即可。,则代表该区间至少被两种颜色的线段覆盖,答案必定为0。原创 2022-10-17 19:48:26 · 597 阅读 · 0 评论 -
Codeforces1729 G. Cut Substrings(线性DP)
它左侧和右侧可能存在多个和它相交的子串,为了尽可能的减少替换次数,但是只能覆盖其中一侧而无法兼顾左右,这一点容易证明。考虑去覆盖它以及它右侧和它相交的所有子串,那么需要在区间。答案应该从整个字符串的最后一个交错段中找,为了方便可以添加一个终点,终点从最后一个交错段转移而来,因此最终需要将这种方式得到的答案减一。因为状态转移是按交错段进行的,正常来说应该对整个字符串的第一个交错段全部初始化为。中的任何一个子串时,这段连续多个交错的子串可以全部被覆盖,下文将简称这段交错子串为交错段。,以及有多少种替换方案。原创 2022-10-12 20:11:12 · 603 阅读 · 0 评论 -
Codeforces1555 E. Boring Segments(尺取+线段树)
传送门题目大意给定 nnn 区间,每个区间都有一个权值。给定一个数 mmm,选择若干个区间能覆盖区间 [1,m][1,m][1,m] 且一定是连通的区间集(这个连通指的是存在每个区间都存在另外一个区间和它有交集),且最大权值和最小权值相差最小。输出最大最小值的差值。解题思路首先考虑如何使最大最小值的差值最小,因为区间什么顺序都无所谓,所以干脆按照权值从小到大排序。考虑当前的区间 iii,若能在它的右边尽可能靠左的位置确定一个两两有交集且覆盖 [1,m][1,m][1,m] 的区间集合,那么就不会考原创 2021-08-03 16:43:36 · 147 阅读 · 0 评论 -
Codeforces1555 D. Say No to Palindromes(思维)
传送门题目大意一个字符串被定义为美丽的当且仅当该区间内不存在任何长度大于等于 2 的回文子串。给定一个仅有前三种字母构成的字符串和若干次询问,每次询问该区间的一个子串如果要修改为美丽的字符串最少需要修改几个字符。解题思路一个字符串不能有长度大于等于 2 的回文子串,表示对于任意的 si−1≠si,si−2≠sis_{i - 1} \neq s_i,s_{i - 2} \neq s_isi−1=si,si−2=si,又因为只有三种字符,所以 si−3=sis_{i - 3} = s_原创 2021-08-03 16:12:09 · 216 阅读 · 0 评论 -
Codeforces Round #729 (Div. 2) C. Strange Function(找规律+容斥定理)
传送门题目大意定义 f(i)f(i)f(i) 为 iii 的最小不整除正整数,求∑i=1nf(i),n≤1016\sum_{i = 1}^nf(i), n \leq 10^{16}∑i=1nf(i),n≤1016。解题思路比赛时打表看出来了规律,但是分析规律的时候脑袋不好使了没写出来,GG~首先不难想到,对于奇数来说,最小不整除正数一定是 222,然后考虑偶数,这时可以按222的次幂个数来分,对于只有一个质因子 222 的数可以得出 fff 要么是 333 要么是 444;若质因子是222^2原创 2021-07-04 19:27:07 · 452 阅读 · 0 评论 -
Codeforces 1517D. Explorer Space(思维+DP)
传送门题目大意给出一个n∗m(1≤n,m≤500)n*m(1 \leq n, m \leq 500)n∗m(1≤n,m≤500)的棋盘,任意一个点和周围的四个点都有一条无向带权边,现在需要求出所有点向外走k(1≤k≤20)k(1 \leq k \leq 20)k(1≤k≤20)步然后回来的最小路径权值和,每个点以及每条边都可以经过多次。解题思路首先四联通的棋盘上,任何一个闭合回路的路径长度一定都是偶数。也就是说如果kkk为奇数那么所有的点一定无解,否则所有的点一定有解。一个结论:从某点走kkk步原创 2021-05-04 10:39:56 · 309 阅读 · 0 评论 -
Codeforces 1519D. Maximum Sum of Products(思维+暴力枚举)
传送门题目大意给出两个长度为n(1≤n≤5000)n(1 \leq n \leq 5000)n(1≤n≤5000)的序列a,ba, ba,b,可以最多一次对序列aaa的某段子数组执行翻转操作,求出如何翻转使得∑i=1nai∗bi\sum_{i = 1}^n a_i*b_i∑i=1nai∗bi最大。解题思路对于本题的数据范围来看O(n2)O(n^2)O(n2)的算法即可,考虑一段子数组翻转后,一定存在某个对称轴,使得关于对称轴对称的数交换位置,想到这里,我们可以枚举对称轴,向两边扩散求出所有的原创 2021-05-01 15:01:17 · 253 阅读 · 0 评论 -
Codeforces 1516D. Cut(质因数分解 + 链表 + 倍增)
传送门题目大意给出一个长度为n(1≤n≤1e5)n(1 \leq n \leq 1e5)n(1≤n≤1e5)的序列ai(1≤ai≤1e5)a_i (1 \leq a_i \leq 1e5)ai(1≤ai≤1e5)。给出q(1≤q≤1e5)q(1 \leq q \leq 1e5)q(1≤q≤1e5)次询问,每次询问给出区间的左右端点l,rl,rl,r,问这个区间最少被分为多少个子数组,使得每个子数组中每个数的乘积都恰好等于他们的lcmlcmlcm。解题思路第一个需要解决的问题是,给定一个区间如何原创 2021-04-26 11:12:01 · 328 阅读 · 0 评论 -
Codeforces 1516C. Baby Ehab Partitions Again(背包+思维)
传送门题目大意给出nnn个数的序列,若这个序列能被分成两部分且这两部分的和相等,称这个序列是不好的。最少删除几个数使得这个序列不是不好的。解题思路不难想到,若一个序列能分为两部分和相同的,那么所有数的和sumsumsum一定是偶数,然后如何判断初始的序列能否分成两部分呢?背包,每个物品选或者不选,判断最后能否凑成sum2\frac{sum}{2}2sum。若能凑成,需要判断删除几个数,直觉判断删除一个数就可以(这部分无法证明,题解也没说如何证明),但这个数不能随便删,考虑序列是否有奇数:原创 2021-04-26 10:34:09 · 298 阅读 · 1 评论 -
Codeforces 1511 E. Colorings and Dominoes(DP)
传送门题目大意给出一个棋盘,黑格代表∗*∗,白格代表ooo,其中白格可以被染成红色或者蓝色。对于横着的连续的两个红格原创 2021-04-16 16:27:44 · 250 阅读 · 1 评论 -
Codeforces 1511D. Min Cost String(构造)
传送门题目描述给出一个字符串sss,若其两个位置i,j(i<j<n)i, j(i < j < n)i,j(i<j<n)满足ai=aj && ai+1=aj+1a_i = a_j ~~\&\&~~ a_{i+1} = a_{j+1}ai=aj && ai+1=aj+1那么会对该字符串的价值加一,给定n,kn,kn,k,仅适用原创 2021-04-13 22:11:00 · 389 阅读 · 0 评论 -
Codeforces 1513 D. GCD and MST(链表 + MST)
传送门题目大意给出一个长度为n(1≤n≤2e5)n ( 1 \leq n \leq 2e5)n(1≤n≤2e5)的序列aaa,初始时每相邻两个数中间都含有一条权值为ppp的边,对于一段区间[i,j][i,j][i,j],若其满足gcd({ak∣i≤k≤j})=min{ak∣i≤k≤j}gcd(\{a_k | i \leq k \leq j\}) = min\{a_k | i \leq k \leq j\}gcd({ak∣i≤k≤j})=min{ak∣i≤k≤j},那么i,ji,ji,j之间有一条权原创 2021-04-12 21:30:24 · 225 阅读 · 0 评论 -
Codeforces 1487E. Cheap Dinner(DP + multiset)
传送门题目大意给出四个大小为ni(1≤ni≤150000)n_i(1 \leq n_i \leq 150000)ni(1≤ni≤150000)序列,给出三种制约关系,即1 21~~21 2、2 32~~32 3和3 43~~43 4两两数组之间都有mi(0≤mi≤200000)m_i(0 \leq m_i \leq 200000)mi(0≤mi≤200000)对数原创 2021-04-09 18:41:47 · 173 阅读 · 0 评论 -
Codeforces 1494D Dogeforces(构造+并查集)
传送门题目大意给出一棵带权树,其中所有父节点的权值一定严格大于子节点。给出了所有叶子节点的权值以及两两叶子之间的 最近公共祖先 LCALCALCA 的权值,试着还原这棵树。解题思路树的构造问题大都从特殊到一般、从叶子结点开始构造。对于两个叶子结点,显然第一次操作时只需要新建一个节点,然后将他们连接起来;对于两棵分别连好了两个叶子节点的子树,如下图所示,若 1 41~~41 4 的 LCALCALCA 的权值大于了两个父节点5,65,65,6,那么我们新原创 2021-04-08 16:01:36 · 201 阅读 · 1 评论 -
Codeforces 1484 B. Restore Modulo(思维+细节处理)
传送门题目大意给出初始的三个数s,m,c(c<m)s,m,c(c < m)s,m,c(c<m),可以通过如下递推得出的一个序列aaa:a1=s%ma_1 = s\%ma1=s%mai=(ai−1+c)%m,i≥2a_{i} = (a_{i-1} + c)\%m,i \geq 2ai=(ai−1+c)%m,i≥2现在反过来,给出一个含有nnn个数的序列aaa,问能否求出m,cm,cm,c,若mmm可以为无穷大则输出000,若不存在mmm则输出−1-1−1。解题思路原创 2021-03-23 09:17:34 · 184 阅读 · 0 评论 -
Codeforces 1499 D. The Number of Pairs(数学推导+埃氏筛)
传送门题目大意给定c,d,xc,d,xc,d,x,求出满足c∗lcm(a,b)−d∗gcd(a,b)=xc*lcm(a,b) - d*gcd(a,b) = xc∗lcm(a,b)−d∗gcd(a,b)=x的(a,b)(a,b)(a,b)的对数。解题思路差一点就写出来了,以为欧拉筛最小质因子的质因数分解可以过结果却被卡TLE了,忘记了埃氏筛同样可以预处理。首先是推导式子,这种式子的下手点一般就是根据都是正整数,那么转化过程中涉及到除法的式子一定可以整除。设gcd(a,b)=ggcd(a,b) =原创 2021-03-21 20:18:59 · 303 阅读 · 0 评论 -
Codeforces 1497E1. Square-free division (easy version)(质因数分解+链表)
传送门题目大意给出一个数组,现在我们需要将它分成连续的若干段使得每段中的任意两数的乘积不是平方数。解题思路首先平方数这个已经很熟了,之前某场的DDD就考了这个东西,将每个数质因数分解后对每个质数的幂次对2取模,两个数的乘积是平方数当且仅当两个数相等。于是我们只需要预处理每个数的右边最近的数的位置,然后从前向后扫的时候只需要不断更新当前段能延伸的最大右边界即可。//// Created by Happig on 2021/3/19.//#include <bits/stdc++.h&g原创 2021-03-20 15:38:47 · 228 阅读 · 0 评论 -
Codeforces Round #705 (Div. 2) C. K-beautiful Strings(思维+贪心)
传送门题目大意给出一个长度为nnn的字符串,找到一个长度相等且字典序大于等于它的字符串使得每个字符出现的次数都是kkk的倍数,如果不存在就输出−1-1−1。解题思路前言一直以来Codeforces的C题都不会特别复杂,好多都是推个贪心简单证明即可,本题尽管是2000分的题但也不例外;这题一开始推出来然后写到一半遇到bugbugbug,错以为自己思路偏了没想到看了题解发现竟和题解一样,事实证明应该自信的。正文首先应该知道答案存在当且仅当n%k==0n\%k==0n%k==0,即答案最坏为nnn原创 2021-03-18 10:17:21 · 188 阅读 · 0 评论 -
Codeforces 1501 - C. Going Home(暴力+数学)
传送门题目大意给出一个序列aaa,问能否找到四个不同的坐标x,y,z,wx,y,z,wx,y,z,w使得满足ax+ay=az+awa_x + a_y = a_z + a_wax+ay=az+aw,若能随便输出一组合法解,否则输出NONONO。解题思路这题实际上考察我们对题目数据范围和时间复杂度计算的理解,首先要找到四个数,常规思路去做的话无论如何都要至少固定两个数,这样的复杂度至少是n2n^2n2,然后就出现了这题比赛时过的人很少的情况。但是如果考虑暴力枚举每两对数的话最多会有n2=4e原创 2021-03-16 15:18:01 · 340 阅读 · 0 评论 -
Codeforces Round #706 (Div. 2) D - Let‘s Go Hiking(思维)
传送门题目大意给出一个1−n1-n1−n的排列ppp,AAA和BBB玩游戏,一开始两个人各选择一个下标nnn,规定AAA先选且先走,AAA只能左边或者右边相邻位置(若存在)且其值小于AAA当前位置的值;BBB只能左边或者右边相邻位置(若存在)且其值大于BBB当前位置的值。而且若相邻位置就是对方当前的数字则不能走。给定序列求出哪些位置可以使AAA获胜。解题思路将每段先递增后递减的序列看做“山峰”,那么AAA需要下山,BBB需要上山,然后我们观察序列不难发现:AAA一定从山顶出发,因为若从山腰出原创 2021-03-14 21:22:50 · 157 阅读 · 0 评论 -
Codeforces Round #705 (Div. 2) D. GCD of an Array(质因数分解 + multiset)
传送门题目大意给出n(1≤n≤2e5)n(1 \leq n \leq 2e5)n(1≤n≤2e5)个数的序列a[ ]a[~]a[ ]和mmm次更新,每次更新可以将a[i]a[i]a[i]乘上x(1≤x≤2e5)x(1 \leq x \leq 2e5)x(1≤x≤2e5),输出每次更新后这nnn个数的gcdgcdgcd。解题思路这题咋一看不太难但是细思也不简单。gcdgcdgcd在质因数分解下的意义为所有的nnn个数公共质因子的最小幂次相乘,可以预处理最小质因子常数时间复杂度分解原创 2021-03-10 15:56:40 · 137 阅读 · 0 评论 -
Codeforces Global Round 13 D. Zookeeper and The Infinite Zoo(思维)
传送门题目大意有无穷个数字1,2,3,4...1,2,3,4...1,2,3,4...,每个数字都代表一个节点,对于该节点vvv来说,若u&v==vu\&v==vu&v==v,那么会有一条有向边u→u+vu \rightarrow u+vu→u+v,给出两个节点v,uv,uv,u,问能否由vvv到达uuu。解题思路对于建边的规则,实际上若两点x,y(x<y)x,y(x<y)x,y(x<y)符合建边的规则,那么xxx中的1一定是yyy中的111的子集。而且观原创 2021-03-09 15:39:09 · 159 阅读 · 1 评论 -
Codeforces Global Round 13 C. Pekora and Trampoline(思维/差分)
传送门题目大意给出nnn个蹦床,其中每个蹦床有一个弹力值sis_isi。设每个蹦床的位置为iii,那么这个蹦床可以向右跳的距离为i+sii + s_ii+si,且每跳一次蹦床的弹力值都会减一,直到si=1s_i=1si=1便再也不会发生变化。每次可以任选一个蹦床出发跳跃,跳出后可能被多次弹到右边的其他蹦床,直到离开蹦床这次跳跃才算结束。问将所有蹦床的弹力值都减少为111时的最少跳跃次数。解题思路首先不难想到越靠左边出发就会使总的次数减少,因为左边每个蹦床出发的跳跃总可以使右边的蹦床的弹力值免原创 2021-03-09 15:03:36 · 218 阅读 · 0 评论 -
Codeforces 1494C 1D Sokoban(二分)
传送门题目大意在坐标轴XXX上,初始时位于0号位置,左半轴和右半轴都分布着若干个箱子,又给出了一些特殊坐标。规则就是类似于推箱子游戏,向某个方向走时若遇到箱子就向前推一格,若有连续的箱子则全部向前推一格,不能越过任何箱子。解题思路实际上本题思路明确后就像是一道模拟题,首先正负轴要分类讨论。对于正半轴,分别对特殊位置和有小球的位置排序,容易知道的是若一个原来没有小球的特殊位置上有小球,那么一定是它前面的所有小球推过去的,且到达该位置时一定是连续的,那么我们枚举每个特殊位置iii,对于有小球的位置二分原创 2021-03-09 11:16:18 · 222 阅读 · 0 评论 -
Codeforces Round #704 (Div. 2) D. Genius‘s Gambit(构造)
传送门题目大意给出a,b,ka,b,ka,b,k,其中a,ba,ba,b代表要输出的两个二进制数x,yx,yx,y中均含有aaa个0,bbb个1,能否构造x,yx,yx,y使得x−yx-yx−y的二进制中含有kkk个1。输出的两个二进制数不能含有前导零。解题思路渐渐地熟悉做构造题的套路——由特殊到一般。这题赛时没时间写,赛后一个多小时写过了,这次写构造还算可以。首先观察到特殊情况b=1b=1b=1的情况,因为不能含有前导零,那么仅当k=1k=1k=1时才是YES,否则就是NO;实际上除了这个,还原创 2021-02-27 19:58:47 · 163 阅读 · 0 评论 -
Codeforces 875F. Royal Questions(贪心+并查集)
传送门题目大意有nnn个王子,mmm个公主,每个公主都恰好有两位中意的王子以及会带来的彩礼价值,问如何安排婚姻可以使得总的彩礼价值和最大。解题思路第一眼可能觉得是二分图,但是数据范围显然跑不了二分图的算法。首先明确一点。也就是说将彩礼价值从大到小排序后,如果能选价值大的那么一定先选,这样结果不会变差,这启发我们进行第一步排序。然后我们分析这样一个例子,三个公主中意的王子分别为(1,2),(2,3),(3,4)(1,2),(2,3),(3,4)(1,2),(2,3),(3,4),我们把王子看做点原创 2021-02-24 01:00:29 · 222 阅读 · 0 评论 -
Educational Codeforces Round 104 (Rated for Div. 2) C. Minimum Ties(思维+构造)
传送门题目大意有nnn个队伍,两两之间要进行一场比赛,一共进行n(n−1)2\frac{n(n-1)}{2}2n(n−1)次比赛,a,ba,ba,b两队比赛的计分规则如下:若两队伍平手输出000,且两队均得一分。若aaa胜利则输出111,aaa得3分bbb不得分。若bbb胜利则输出−1-1−1,bbb得3分aaa不得分。给出一种构造方式使得所有队伍得分相同且平手的场次最少。解题思路...原创 2021-02-19 18:31:14 · 149 阅读 · 0 评论 -
Educational Codeforces Round 103 (Rated for Div. 2) D. Journey(思维)
传送门题目大意给出nnn个字符,节点编号为[0,n][0,n][0,n],第iii个字符若为LLL代表节点iii到节点i−1i-1i−1有一条有向边,否则代表节点i−1→ii-1 \rightarrow ii−1→i有一条有向边。如果从一个点走到另外一个点,那么所有边的方向会立刻反向。分别输出从每个节点出发能经历的所有节点个数。解题思路首先手玩一下样例,不难发现如果一个点可以向某个方向不断走,那么那个方向的LRLRLR一定是交替出现的!而且走到终点一定可以原路返回,这启发我们,只要能预处理出每个节原创 2021-01-31 15:54:03 · 152 阅读 · 0 评论 -
Codeforces Round #698 (Div. 2) D. Nezzar and Board(找规律+裴蜀定理)
传送门题目大意给出一个nnn个数,每次可以从序列中任选两个数x,yx,yx,y,然后将2x−y2x-y2x−y添加进序列。给定kkk问它能否被表示出来。解题思路假设有三个数x,y,zx,y,zx,y,z,首先我们选出x,yx,yx,y构成2x−y=x+x−y2x-y = x+x-y2x−y=x+x−y,选出y,zy,zy,z构成2z−y=z+z−y2z-y = z+z-y2z−y=z+z−y,然后对这两个新得到的数,我们再做一次得到2(2x−y)−(2z−y)=(x+x−y)+(x+x−y)−(z原创 2021-01-30 23:41:54 · 155 阅读 · 0 评论 -
Codeforces Round #698 (Div. 2) B. Nezzar and Lucky Number(思维)
传送门解题思路给出k(1≤k≤9)k(1 \leq k \leq 9)k(1≤k≤9),一个数是luckyluckylucky当且仅当它能够被若干个十进制某位中含有kkk的数累加求和表示。判断给出的nnn个数,判断每个数aia_iai是否能由若干个luckyluckylucky数累加。解题思路这题感觉挺有意思,菜鸡写了四十分钟才出,感觉自己还是对这类问题的理解不够深刻。因为数很大,肯定是有某种规律,但是打表出来的也找不到规律。实际上:首先k=1k=1k=1,或者模kkk等于零,或者该数某位原创 2021-01-30 22:54:10 · 140 阅读 · 0 评论 -
Codeforces Round #697 (Div. 3)(ABCDEFG)
传送门A . Odd Divisor(思维)题目大意给出一个数nnn,若它含有奇数的质因子那么输出YES,否则输出NO。解题思路一开始傻逼了,先是根号nnn枚举结果TLE了,然后很急,迫不得已上了PR质因数分解的板子。刚交就想到这不就是只有222的幂才不会含有奇数质因子吗?我被自己搞傻了。题解学到一手,用二进制思想判断一个数是否为222的幂次,学会了。//// Created by Happig on 2021/1/24.//#include <bits/stdc++.h>原创 2021-01-26 21:41:23 · 171 阅读 · 0 评论 -
Codeforces Round #696 (Div. 2) D. Cleaning(思维)
传送门题目大意给出一个序列,每次可以任意选择相邻的两个数,使得两个数都减去二者的最小值。现在可以最多交换两个相邻的数,问能否将整个序列全部消为0。解题思路假设不能交换,我们可以从前向后依次进行上述操作,设数组pre[i]=a[i]−pre[i−1],pre[0]=0pre[i] = a[i] - pre[i-1],pre[0] = 0pre[i]=a[i]−pre[i−1],pre[0]=0,如果到最后一步结束后pre[n]=0pre[n] = 0pre[n]=0,那么成功消成000;显然从后向前原创 2021-01-23 22:41:20 · 111 阅读 · 2 评论 -
Codeforces Round #694 (Div. 2) D. Strange Definition(平方数在质因数分解下的意义)
传送门题目大意给出一个序列,定义序列中的两个数a,ba,ba,b是adjacentadjacentadjacent当且仅当lcm(a,b)gcd(a,b)\frac{lcm(a,b)}{gcd(a,b)}gcd(a,b)lcm(a,b)是平方数。现在每秒会发生如下操作,设序列中的每个数aia_iai和序列中的如下jjj个数{b1,b2,...,bj}\{b_1,b_2,...,b_j\}{b1,b2,...,bj}为adjacentadjacentadjacent(包括它自己),那么aia_原创 2021-01-14 17:13:47 · 182 阅读 · 0 评论 -
Educational Codeforces Round 97 (Rated for Div. 2) C. Chef Monocarp(DP)
传送门题目大意给出一个序列,现在的时间是从111开始计时的,每次增加一分钟,对于一个固定的时间ttt能任意选择序列的一个数aia_iai,此时对答案的贡献为∣t−ai∣|t-a_i|∣t−ai∣,每个数只能且必须选一次,问最小的贡献和是多少。解题思路一开始以为是贪心,但是写的代码有点难调,后来就干脆放弃了,好像题解里面没有写贪心的。实际上对于数据来说,完全支持O(n2)O(n^2)O(n2)的复杂度。而且数据范围比较小,一般来说这样的题目要么是思维模拟要么就是DP了。首先对序列排序是肯定的,原创 2020-11-05 10:40:50 · 128 阅读 · 0 评论 -
Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits(贪心)
传送门题目大意给出nnn个萝卜,现在需要分成长度为正整数的若干个萝卜,定义每个长度为xxx的胡萝卜贡献为x2x^2x2,问最小的贡献是多少。解题思路手玩一下样例,还是不难得出对于一个胡萝卜若需要切成lll份,那么肯定是均摊才能是贡献最小。但是对于多个胡萝卜,并不容易得出每次切哪一根才能得到最优解。实际上无需考虑这一点,因为萝卜不能拼接,也就是如果最后的答案是将某些胡萝卜切成若干份,每份仍然是均摊的。这就启发我们,对于长度为xix_ixi假设已经切了pip_ipi刀的胡萝卜,那么考虑所有胡萝卜被原创 2020-10-26 21:07:24 · 267 阅读 · 0 评论 -
Codeforces Raif Round 1 (Div. 1 + Div. 2) D. Bouncing Boomerangs(思维+构造)
传送门题目大意给出一个n∗mn*mn∗m的方格,保证每行每列最多只能有两个障碍,现在每列都会射出一个飞镖,飞镖碰到障碍物会向右旋转九十度继续直行,保证最多碰到三次障碍物。现在给出每列出发的飞镖最后弹射的次数,如果答案存在,需要我们还原一个合法含有若干障碍物的表格。解题思路这道题我感觉有以下两个难想的地方:首先是不能从左向右构造而需要从右向左构造,原因是弹射两次的飞镖,肯定需要右边弹射一次飞镖的列作为最后一次弹射,弹射三次的飞镖既可以利用右边弹射一次的列而且可以利用右边弹射两次及以上的列。而且原创 2020-10-26 20:48:30 · 203 阅读 · 0 评论 -
Codeforces Round #677 (Div. 3) F. Zero Remainder Sum(dp好题)
传送门题目大意给出一个n∗mn*mn∗m的矩阵,每行最多选出⌊m2⌋\lfloor \frac{m}{2} \rfloor⌊2m⌋个数(可以不选视贡献为零),给定kkk,问从矩阵中选出若干个数使其和为kkk的倍数,并输出最大结果。解题思路典型的类背包dpdpdp,常见的是序列的每个数选或者不选,然后同余转移。但是本题是一个加强版,也是考验dpdpdp功底的题目,因为范围很小,开一个范围内的四位数组绰绰有余,我们设d(i,j,cnt,res)d(i,j,cnt,res)d(i,j,cnt,res原创 2020-10-24 22:10:22 · 147 阅读 · 0 评论 -
Educational Codeforces Round 95 D. Trash Problem (set的应用)
传送门题目大意在坐标轴有有若干堆垃圾,坐标不会重复,现在需要将所有垃圾移到一堆或者两堆中,求最小花费。此外还有若干次询问,每次可以删去或者添加一堆垃圾,并求出每次的最小花费。解题思路大概手玩一下,我们可以发现最终的答案实际上就是每对相邻坐标的差分之和再减去最大的差分。因为坐标是唯一且有序的,而且涉及到添加和删除,那么我们考虑使用setsetset维护序列,然后每次只需要迭代器二分查找,只是需要注意很多细节。然后学到了迭代器的前一个和后一个可以直接使用函数来求:prev(iterator)pre原创 2020-10-12 10:44:53 · 106 阅读 · 0 评论 -
Educational Codeforces Round 95 (Rated for Div. 2) C. Mortal Kombat Tower(DP/规律)
传送门题目大意给出nnn个怪物两个人从前到后依次轮流打,第一个人只能杀小怪,如果杀boss需要额外费用,第二个人随便杀,每人每次只能杀一个或者两个且不能不杀,问杀完所有怪物的最小花费是多少思路一明显是裸的DP,设d[i][0/1]d[i][0/1]d[i][0/1]分别表示第iii个怪物由第一个人杀和第二个人杀的最小花费,考虑状态转移:d[i][0]=min(d[i−1][1]+a[i],d[i−2][1]+a[i]+a[i−1])d[i][0]=min(d[i-1][1]+a[i],d[i-2原创 2020-10-10 09:55:30 · 203 阅读 · 0 评论