![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Codeforces
文章平均质量分 73
_lifehappy_
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #739 (Div. 3)(AK实况)
Codeforces Round #739 (Div. 3)A. Dislike of Threes找到第kkk个既不是333的倍数,个位数上也不是333的数,也已预处理然后O(1)O(1)O(1)输出,也可直接forforfor循环暴力。#include <bits/stdc++.h>using namespace std;int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w",原创 2021-08-22 22:33:27 · 297 阅读 · 0 评论 -
D. Cut and Stick(Codeforces Round #716 (Div. 2))
D. Cut and Stick给定一个长度为nnn的数组,里面元素为a1,a2,a3,…,an−1,an,(1≤ai≤n)a_1, a_2, a_3, \dots, a_{n- 1}, a_n, (1 \leq a_i \leq n)a1,a2,a3,…,an−1,an,(1≤ai≤n),有mmm次询问,每次给定l,rl, rl,r,问如果把[l,r][l, r][l,r]划分若干段子序列,假设其中一段长度为lenlenlen,里面出现最多次的元素次数$ \leq \lceil \frac原创 2021-04-20 15:57:52 · 372 阅读 · 0 评论 -
E. Almost Sorted(构造,递归)
E. Almost Sorted我们定义 almost sorted 数组为,ai+1≥ai−1a_{i + 1} \geq a_i - 1ai+1≥ai−1,也就是说,先写几项出来看看:n = 11n = 21 22 1n = 31 2 31 3 22 1 33 2 1容易发现一定是,形如x,x−1,x−2,…,1,…x, x - 1, x - 2, \dots, 1, \dotsx,x−1,x−2,…,1,…,这样的,也就是前缀是一连串的下降的数字,假设数字长原创 2021-04-19 17:41:36 · 565 阅读 · 0 评论 -
E. Number Challenge
E. Number Challenge推式子∑i=1a∑j=1b∑k=1cσ(ijk)=∑i=1a∑j=1b∑k=1c∑x∣i∑y∣j∑z∣k(gcd(x,y)=1)(gcd(x,z)=1)(gcd(y,z)=1)=∑x=1a∑y=1b∑z=1c⌊ax⌋⌊by⌋⌊cz⌋(gcd(x,y)=1)(gcd(x,z)=1)(gcd(y,z)=1)=∑d=1aμ(d)∑x=1⌊ad⌋⌊adx⌋∑y=1⌊bd⌋⌊bdy⌋∑z=1c⌊cd⌋(gcd(x,z)=1)(gcd(y,z)=1)=∑d=1aμ(d)∑z=1原创 2020-08-23 15:21:38 · 228 阅读 · 0 评论 -
E. Beautiful Subarrays(思维 01 trie 树)
E. Beautiful Subarrays思路显然有ai⨁ai+1⨁……⨁an=(a1⨁a2⨁……⨁an)⨁(a1⨁a2⨁……⨁ai−1)a_i\bigoplus a_{i + 1} \bigoplus ……\bigoplus a_{n} = (a_1 \bigoplus a_2 \bigoplus……\bigoplus a_{n}) \bigoplus (a_1 \bigoplus a_2 \bigoplus …… \bigoplus a_{i - 1})ai⨁ai+1⨁……⨁an=(a1⨁原创 2020-08-18 17:03:30 · 368 阅读 · 0 评论 -
G. Xor-MST(异或最小生成树)
G. Xor-MST思路异或最小生成树,这里采用了一种分治的方法来贪心求解最值:首先我们对所有的点权值从小到大排个序,从高位开始在中间找到一个这个位置上的0,10,10,1分界点分成两个集合,然后再通过递归的去求解两个集合。在递归的时候,对两个分开的集合,我们通过trietrietrie树去贪心的在两个集合连上一条边,把这条边加入我们的答案。为什么这样是对的:显然我们分成两个集合我们可以抵消掉高位的一大堆一样的东西,这个时候,我们可以保证我们的贪心策略是正确的。为什么我们要合并两个集合:假设原创 2020-07-26 19:59:07 · 955 阅读 · 0 评论 -
D. Salary Changing(二分,前缀和,贪心,瞎搞)
Salary ChangingThinking这道题第一思路就是二分,模拟了一下样例,感觉好像行于是就开始写。对于二分,我们一定是二分中位数是什么,二分的边界对我们来说是非常重要的,所以我们在二分前有必要确认我们的二分边界,因为一定有∑i=1nli<=s\sum _{i = 1} ^ {n} l_i <= s∑i=1nli<=s,所以我们对lll数组sortsortsort一遍,得到left=lmidleft = l_{mid}left=lmid,同样的,对rrr数组sorts原创 2020-07-03 17:40:11 · 293 阅读 · 0 评论 -
Codeforces Round #653 (Div. 3)(A, B, C, D, E1详解)
Codeforces Round #653 (Div. 3)Required RemainderThinking(binary search)既然是找最大值问题,我又懒得去推式子,于是我直接就上了一个二分,二分写法比结论稍微繁琐了一点吧,但是还是挺好想的。根据题意,我们的任务就是找到一个最大的数,满足ans=k∗x+y<=nans = k * x + y <= nans=k∗x+y<=n,于是我们就可以通过二分枚举kkk,来得到我们的答案。通过题目给定的x,y,zx, y, zx,原创 2020-06-29 10:19:03 · 585 阅读 · 2 评论 -
Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
Educational Codeforces Round 90 (Rated for Div. 2)Donut Shops思路分三种情况:a==c/ba == c / ba==c/b这个时候两个的单价是相同的,如果b==1b == 1b==1,也就是a==ca == ca==c,无论买多少数量的东西,这两个的价格都是一样的,直接输出"-1 -1",否则的话,只要输出"%d -1", %d可以是小于b大于1的任意数字。a>c/ba > c / ba>c/b,如果a<ca &原创 2020-06-26 17:13:18 · 2247 阅读 · 1 评论 -
F:Maximum White Subtree(树形dp)
Maximum White Subtree思路如果考虑其覆盖范围只会到其子树上,不会到其父节点上的话(假设的情况),这道题就非常好写了,就是一个简单的自底向上传递的树形dpdpdp。所以我们还要考虑的就是连接其父节点,因此我们只需要再进行一个自顶下向传递的树形dpdpdp即可。第一遍的dfsdfsdfs比较简单,但是第二遍的dfsdfsdfs有一些细节需要考虑,我在下面的代码中给出了注释。写完后找了题解,好像这是换根dp?dp?dp?,蒟蒻我没有学过啥换根dpdpdp。代码#include &l原创 2020-06-20 16:19:30 · 417 阅读 · 0 评论 -
E:Three Blocks Palindrome(hard and easy)(树状数组 ? 前缀和?)
Three Blocks Palindrome (hard version)思路考虑到每个数字的范围是1 2001 ~ 2001 200,于是我们可以通过枚举两侧的元素来寻找最优答案。我们有一个贪心策略,两侧都以我们枚举的元素作为结尾点,假如我们当前枚举的数字是1,于是我们将构成……1∣…………∣1…………1|…………|1…………1∣…………∣1……这种分界线,这样可以保证两边对中间的影响最小,于是我们就可以从1 n1 ~ n1 n来枚举我们左侧的结尾点,然后通原创 2020-06-19 20:40:13 · 381 阅读 · 0 评论 -
E:K-periodic Garland(DP)
思路每个点我们有两种决策,其值为0或1:如果点我们放置0的话,我们有其前一位数字是零,或者其前一位数字是一。如果这个点我们放置1的话,我们有其前面是按照每k个数字都出现一次1的排列,也有可能其前面的数字全是0。这就有点像是dpdpdp了,我们规定dp[i][0]dp[i][0]dp[i][0],表示我们在这一位放000, dp[i][1]dp[i][1]dp[i][1],表示我们在这一位放111,由此我们有状态转移方程。dp[i][0] = min(dp[i - 1][0], dp[i - 1].原创 2020-06-19 16:13:15 · 404 阅读 · 0 评论 -
E:Modular Stability(组合数)
Modular Stability思路(((xmod a1)mod a2)……mod ak−1)mod ak=(((xmod p1)mod p2)……mod pk−1)mod pk(((x \mod a_1) \mod a_2) …… \mod a_{k - 1}) \mod a_{k} = (((x \mod p_1) \mod p_2) …… \mod p_{k - 1}) \mod p_{k}(((xmoda1)moda2)……modak−1)modak=(((xmodp1原创 2020-06-19 15:26:38 · 459 阅读 · 0 评论 -
Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)
Educational Codeforces Round 89 (Rated for Div. 2)A. Shovels and Swords思路题意非常简单,就是得到最多的物品嘛,我们假定a,ba, ba,b中aaa是最小的一个,分两种情况。如果2∗a<=b2 * a <= b2∗a<=b,那么我们只需要购买花费是1,21, 21,2的东西即可,也就是最后能购买得到aaa件物品。否则的话,我们一定是先让数量更多的去减222,用数量更少的去减111,直到两个物品的数量相等,再通过原创 2020-06-12 15:57:56 · 436 阅读 · 1 评论 -
E:Tree Queries(假树链剖分写法)
博客园地址E:Tree Queries思路当我写完A完这道题后,百度了一下,发现好像没有人是用类树链剖分来写的,都是LCALCALCA,于是我就来水一篇树链剖分题解了。第一步:贪心取点我们可以发现,要使所有的点相连我们必须选择一条最长的路,也就是在kkk个点中,选择一个与root=1root = 1root=1最远的点,这样才有可能满足条件,假设起点为s = 1, t = i for i in range(K原创 2020-06-10 14:38:52 · 1190 阅读 · 4 评论 -
C. Orac and LCM(数论lcm, gcd)
C. Orac and LCM思路题目非常简单,就是求gcd(lcm(i, j)) for i in range(n), for j in range(n), i < jgcd(lcm_(i,\ j))\ for\ i\ in\ range(n),\ for\ j\ in\ range(n),\ i\ <\ jgcd(lcm(i, j)) for&nb原创 2020-06-09 16:12:11 · 314 阅读 · 0 评论 -
E:Sleeping Schedule(DP)
或许更好的阅读体验Sleeping Schedule思路这道题读题就感觉像时DPDPDP,读完题后更加坚定了,这是一道DPDPDP题目。我们考虑状态转移方程,dp[i][j]dp[i][j]dp[i][j]表示在第iii次入睡时间是jjj的时候的时间最优值,所以显然有我们的状态转移方程就是dp[i][(j+a[i])%n]=max((dp[i][j+a[i])%n),dp[i−1][j]+1dp[i][(j + a[i]) \% n] = max((dp[i][j + a[i]) \% n), d原创 2020-06-08 22:07:02 · 262 阅读 · 0 评论 -
D:Ehab the Xorcist
或许更好的阅读体验Ehab the Xorcist思路刚看时确实是一脸懵,最怕的就是这种构造题了,然后细想好像能写啊。判断不可行的条件,只有两种情况:一、v<uv < uv<u是一定不可能的,一串数的异或值一定小于其数串的和。二、当u是奇数时,数串中一定存在奇数个奇数,所以整体的和一定是奇数;当u时偶数时,如果存在奇数,那么一定是偶数个奇数,所以整体的和一定是偶数。到了这里两种不可行的情况就考虑完了, n接下来我们考虑可行的方案:假设v==uv == uv==u,当v原创 2020-06-08 21:14:37 · 246 阅读 · 0 评论 -
Codeforces Round #648 (Div. 2)(A, B, C, D)
Codeforces Round #648 (Div. 2)或许更好的阅读体验A:Matrix Game思路题意可以说是非常简单的,我们选定的格子的行列都不能存在1,可以发现我们可以放的格子一定是固定的,然后这题就变成了技术总共可以放多少个棋子了,所以我们直接开两个数组记录一下行列是否有1存在,再通过暴力求解的到可放的格子的数量就行,具体看代码注释吧。代码#include <bits/stdc++.h>using namespace std;typedef long long原创 2020-06-08 11:09:17 · 298 阅读 · 0 评论 -
E:Johnny and Grandmaster
Johnny and Grandmaster或许更好的阅读体验思路这道题就是把一组数分成两个集合,使这两个集合的对p的次方的和的差的最小值,也就是求sum1−sum2sum1 - sum2sum1−sum2得最小值, 由于结果过大我们可能需要对结果取模。那么这题得关键在于我们应该如何分配这两个集合,也就是如何得到最优的sum1−sum2sum1 - sum2sum1−sum2的值。我们先把给定的数组从大到小排序,我们一定可以得到pa[1]=pa[2]+pa[3]+pa[4]……+pa[x]p ^ {原创 2020-06-05 19:53:29 · 245 阅读 · 0 评论