Codeforces
如题
Yuhan の Blog
这个作者很懒,什么都没留下…
展开
-
Codeforces 1355D Game With Array
题目链接:https://codeforces.com/contest/1355/problem/D思路:结论:S<2NS<2NS<2N时Petya会输,否则会赢;证明:1.当S≥2NS\geq2NS≥2N时,我们选择(1,1,...,1,S−N+1)(1,1,...,1,S-N+1)(1,1,...,1,S−N+1)这个序列(一共有N−1N-1N−1个111),且令K=NK=NK=N;我们需要证明任意子连续的子序列和不等于NNN和S−NS-NS−N;(1)如果子序列不原创 2020-05-24 15:04:52 · 357 阅读 · 1 评论 -
Codeforces 1353D Constructing the Array
题目链接:https://codeforces.com/contest/1353/problem/D思路:我们将所有待处理的子线段按照{长度,左端点序号,右端点序号}按序存储在优先队列中,然后挨个处理即可;代码:#include<bits/stdc++.h>using namespace std;struct seg { int len, l, r; bool operator < (const seg & s) const { return le原创 2020-05-16 13:17:50 · 286 阅读 · 0 评论 -
Codeforces 1294F Three Paths on a Tree
题目链接:Codeforces 1294F Three Paths on a Tree思路:首先三个点中有两个点一定是该树的直径之一的两个端点,我们设为a,b;(不会证明orz)还剩一个点c,设len(a,b)len(a,b)len(a,b)是a到b的距离,则答案即为len(a,b)+len(b,c)+len(a,c)2\frac{len(a,b)+len(b,c)+len(a,c)...原创 2020-01-23 18:35:09 · 369 阅读 · 0 评论 -
Codeforces 1294E Obtain a Permutation
题目链接:Codeforces 1294E Obtain a Permutation思路:对于每一列的数组,我们分开考虑,设当前为第j列(j从1开始);对于在第i位置的数(i从0开始),它应该为i * m + j,因此如果一个数n是在我们目标序列中的,它的位置应该为(n - j) / m;遍历我们当前的序列,计算这个数是否在目标序列中,如果在就计算当前应该挪多少次才能到它应该在的位...原创 2020-01-23 17:15:50 · 334 阅读 · 0 评论 -
Codeforces 1294D MEX maximizing
题目链接:Codeforces 1294D MEX maximizing思路:1.我们需要一个数组记录当前数的分布情况,同时维护一个变量now表示当前的答案;2.当给出一个y时,我们需要计算使得cnt * x + y >= now的最小cnt,此时计算出来的cnt * x + y就是新的y,并将此位置的值加上1;3.当now所在的位置值大于0时,now就可以往后移动,而当前的...原创 2020-01-23 17:03:35 · 359 阅读 · 0 评论 -
Codeforces 1294B Collecting Packages
题目链接:Codeforces 1294B Collecting Packages思路:将横纵坐标存在pair里并排序,此时可以得到最优解;然后依次遍历,如果当前坐标比前一个坐标的y值要小,则输出NO;否则就依次计算答案代码:#include<bits/stdc++.h>using namespace std;#define fi first#define...原创 2020-01-23 16:48:42 · 258 阅读 · 0 评论 -
Codeforces 1294C Product of Three Numbers
题目链接:Codeforces 1294C Product of Three Numbers思路:此题就是求一个数的约数:一个数n的约数可以从2遍历到sqrt(n),最后它本身也是一个约数;此题就是求出两个这样的约数,第三个数就是原数除以前两个约数的结果;注意三个数都需要大于1且互不相同;代码:#include<bits/stdc++.h>using names...原创 2020-01-23 16:53:33 · 405 阅读 · 0 评论 -
Codeforces 1294A Collecting Coins
题目链接:Codeforces 1294A Collecting Coins思路:首先将三个人的硬币数量都变为max(a,b,c)max(a,b,c)max(a,b,c),且剩下的硬币应为3的倍数代码:#include<bits/stdc++.h>using namespace std;int main() {#ifdef MyTest freopen("...原创 2020-01-23 16:45:24 · 237 阅读 · 0 评论 -
Codeforces 1287C Garland
题目链接:Codeforces 1287C Garland思路:我们记dp[i][j][0]和dp[i][j][1]分别为第i个为奇数/偶数且前i个里面有j个偶数的情况下,第i个的最小复杂度;很容易得到第i个是奇数/偶数时的递推关系;当第i个是空着时,它取奇偶都可以,我们均递推一下取最小即可;最终答案就是前n个偶数为n/2个的情况下,取[0]和[1]的最小值;代码:#incl...原创 2020-01-16 22:33:49 · 1078 阅读 · 0 评论 -
Codeforces 1288C Two Arrays
题目链接:Codeforces 1288C Two Arrays思路:先考虑这样一个问题:设数列a是非降序数列,一共有m项,a的所有值不超过y且首项为x,那这样的数列一共有多少个?设dp[i][j]dp[i][j]dp[i][j]为第iii项取x+j−1x+j-1x+j−1的种数,则可以得到递推式dp[i][j]=(dp[i][j−1]+dp[i−1][j])dp[i][j] = ...原创 2020-01-15 20:10:35 · 605 阅读 · 0 评论 -
Codeforces 1288E Messenger Simulator(BIT)
题目链接:Codeforces 1288E Messenger Simulator思路:1.对于每个数,它的最小要么是被移到最左边是1,要么就是初始位置;2.至于计算最大,贪心的思想是:如果一个数要被移动,我们在移动之前计算一下这个数左边有多少个;同时所有移动结束后也应该计算一下;最大取所有历史计算值的最大值;3.如何快速的计算左边有多少个数呢?这种动态前缀和当然是用树状数组,如何...原创 2020-01-15 20:25:48 · 478 阅读 · 0 评论 -
Codeforces 1288D Minimax Problem
题目链接:Codeforces 1288D Minimax Problem思路:1.我们二分这个最小最大值,每次判断这个值可不可以;2.对于一个数组,一共有八个数字,如果这个数字大于当前二分的值,就设为1,否则为0,那么一个数组就可以转化为八个0/1,组合起来就变成一个小于等于255的二进制数,如果有两个数组它们转换出来的数相异或,值为255,就说明这两个数组可以合成当前二分值。3...原创 2020-01-15 20:18:33 · 376 阅读 · 0 评论 -
Codeforces 1288B Yet Another Meme Problem
题目链接:Codeforces 1288B Yet Another Meme Problem思路:设len(x)len(x)len(x)代表正整数xxx的位数;即求方程a∗b+a+b=a∗10len(b)+ba*b+a+b=a*10^{len(b)}+ba∗b+a+b=a∗10len(b)+b解的对数两边约分可得b+1=10len(b)b+1=10^{len(b)}b+1=10le...原创 2020-01-15 18:53:40 · 524 阅读 · 0 评论 -
Codeforces 1288A Deadline
题目链接:Codeforces 1288A Deadline思路:即求x+ceil(dx+1)x+ceil(\frac{d}{x+1})x+ceil(x+1d)的最小值会不会超过nnn用不等式a+b≤2aba+b\leq2\sqrt{ab}a+b≤2ab可求得左式的最小值即为2ceil(d)−12ceil(\sqrt{d})-12ceil(d)−1代码:#include&...原创 2020-01-15 18:46:33 · 395 阅读 · 0 评论 -
Codeforces 1283F DIY Garland
题目链接:Codeforces 1283F DIY Garland思路:用一个数组保存所有结点度数,从后往前扫题目给的数组,[loop][根据贪心思想,每次匹配当前结点和度数为1的结点里序号最小的那个形成一条边,由于是从后往前扫,则我们是从叶子往根部推,因此匹配完这次后可以剪掉这条边不在考虑,算法上的体现就是两者度数都减一]代码:#include<bits/stdc++.h...原创 2019-12-31 17:01:59 · 345 阅读 · 1 评论 -
Codeforces 1283E New Year Parties
题目链接:Codeforces 1283E New Year Parties思路:1.求最小:如果一个房子有人,那么包含它的连续三个房子至少有一个人,那么采用贪心思想,从前往后扫,如果房子有人,那么就判定连着的三个房子有一个人;2.求最大:一段长为n的连续有人区间,如果总人数为n+1,那么这段区间可以向左给出一个人,如果总人数大于n+1,则又可以向右给出一个人;那我们采用贪心思想,从...原创 2019-12-30 23:30:03 · 367 阅读 · 0 评论 -
(Good Bye 2019) Codeforces 1270E Divide Points
题目链接:Codeforces 1270E Divide Points思路:对于所有点我们将他们分为四类:(1)(偶,偶) (2)(偶,奇) (3)(奇,偶) (4)(奇,奇);以第一个点为原点重新划分坐标轴;所有点如果都属于第一类,我们就将比例缩小两倍即所有点坐标除以2,直到有点不属于第一类,我们注意到第一个点是(0,0)永远属于第一类,所以现在我们至少有两类点;1.如果(2)...原创 2019-12-30 17:54:57 · 390 阅读 · 0 评论 -
(Good Bye 2019) Codeforces 1270D Strange Device(互动题)
题目链接:Codeforces 1270 D Strange Device思路:(这种interactive problem还蛮新鲜的QAQ)不管n多大,我们只研究前k+1个数;每个数都忽略一次其它数都询问,我们一共会询问k+1次;想象一下这k+1个数排序后,设x等于第m个位置的数,y等于第m+1个位置的数(y一定大于x),那么k+1个询问中:一定只会出现x和y且y会出现m次;...原创 2019-12-30 17:38:58 · 392 阅读 · 0 评论 -
(Good Bye 2019) Codeforces 1270C Make Good
题目链接:Codeforces 1270 C Make Good思路:设已有的所有数相加得到x,异或得到y第一步我们在尾部附加y,现在两个数为x+y和0;第二步我们在尾部附加x+y,现在两个数为2(x+y)和x+y;这样就符合题意了~代码:#include<bits/stdc++.h>using namespace std;typedef pair<i...原创 2019-12-30 17:30:35 · 301 阅读 · 2 评论 -
(Good Bye 2019) Codeforces 1270B Interesting Subarray
题目链接:Codeforces 1270B Interesting Subarray思路:如果所有相邻的数差距都小于2,则输出NO;反之如果大于等于2,相邻的那两个数就符合要求;代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long lon...原创 2019-12-30 17:27:45 · 332 阅读 · 0 评论 -
(Good Bye 2019) Codeforces 1270A Card Game
题目链接:Codeforces 1270A Card Game思路:拿到最大的那张牌的人一定赢代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long ll;#define fi first#define sc second#d...原创 2019-12-30 17:24:59 · 313 阅读 · 0 评论 -
Codeforces 1283D Christmas Trees(BFS)
题目链接:Codeforces 1283D Christmas Trees思路:直接BFS即可,先将距离圣诞树为1的点都加进队列,在pop距离为1的点时又可以加入距离为2的点…依次操作直到找到m个点;用map来存储某个点是否被占用、以及离树的最短距离;不要使用unordered_map,虽然u_map一般情况效率很高,但是遇到一些特殊情况效率反而比map低很多,具体原因参考这篇bl...原创 2019-12-29 17:17:19 · 666 阅读 · 1 评论 -
Codeforces 1283C Friends and Gifts
题目链接:Codeforces 1283C Friends and Gifts思路:将还没有分配的人和还没有被分配的人分别存进两个数组,挨个遍历,如果相同位置是同一个人,就和下一个交换代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long l...原创 2019-12-29 17:12:02 · 1337 阅读 · 0 评论 -
Codeforces 1283B Candies Division
题目链接:Codeforces 1283B Candies Division思路:先使每个人糖果一样且尽可能用最多糖,然后再一个一个分派知道糖不够或者达到[k/2]代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long ll;#d...原创 2019-12-29 17:08:21 · 443 阅读 · 0 评论 -
Codeforces 1283A Minutes Before the New Year
题目链接:Codeforces 1283A Minutes Before the New Year思路:照意思计算输出即可代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long ll;#define fi first#defin...原创 2019-12-29 17:06:08 · 234 阅读 · 0 评论 -
Codeforces 1279D Santa's Bot(逆元+概率计算)
题目链接:Codeforces 1279D Santa’s Bot思路:设一共nnn个小朋友,对于第iii个礼物,能送给想要的小朋友的概率为1n∗∑1k∗an\frac{1}{n}*\sum\frac{1}{k}*\frac{a}{n}n1∗∑k1∗na,kkk分之一的求和是该礼物所在的那些kkk的倒数求和,aaa是该礼物出现的次数;最后再将所有礼物计算出来的概率相加即可;所...原创 2019-12-28 18:22:31 · 468 阅读 · 0 评论 -
Codeforces 1279C Stack of Presents
题目链接:Codeforces 1279C Stack of Presents思路:挨个取礼物,维护历史取到的最低层;如果当前礼物的层次高于最底层,那时间只要1(因为之前必定以及排序好),否则就要按层次算时间;代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;...原创 2019-12-28 18:15:38 · 378 阅读 · 0 评论 -
Codeforces 1279B Verse For Santa
题目链接:Codeforces 1279B Verse For Santa思路:贪心思想,先背,背不下去就挑前面最长的一段省代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi first#defi...原创 2019-12-28 17:55:46 · 481 阅读 · 0 评论 -
Codeforces 1279A New Year Garland(鸽巢原理)
题目链接:Codeforces 1279A New Year Garland思路:简单的鸽巢原理思想代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi first#define sc second...原创 2019-12-28 17:52:49 · 387 阅读 · 0 评论 -
Codeforces 1282B2 K for the Price of One (Hard Version)
题目链接:1282B2 K for the Price of One (Hard Version)思路:首先排序,再设dp[i]是index从0买到i为止的最小开销,然后以贪心思想递推;最后求满足dp[i]<=p的最大i即可代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,i...原创 2019-12-25 19:10:22 · 290 阅读 · 0 评论 -
Codeforces 1282A Temporarily unavailable
题目链接:Codeforces 1282A Temporarily unavailable思路:将四个端点位置进行分类讨论即可代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi first#def...原创 2019-12-25 19:06:55 · 396 阅读 · 0 评论 -
Codeforces 1277E Two Fairs(dfs)
题目链接:1277E Two Fairs思路:1.题意为a到b必须经过x和y,有多少对{a,b};2.我们将这个问题拆解开来:(1)有多少x想要到达b,必须经过a?由于是无向图,我们可以将这个问题转换为,b可以到达的点中,多少个点必须经过a?两次dfs即可;(2)a能到达的点中,多少必须经过b?两次dfs即可;根据计数的知识,我们可以知道答案即为上述两个问题答案的乘积;...原创 2019-12-21 18:24:40 · 304 阅读 · 0 评论 -
Codeforces 1277D Let's Play the Words?
题目链接:1277D Let’s Play the Words?思路:1.首先只考虑首尾,分别统计01 10 00 11的个数,如果前两个没有,后两个都有那肯定不可以;反之后两个可以不考虑,因为肯定可以接上;2.因为是首尾相接,01 10的数量需要相等或者相差1;3.遍历所有字符串,如果01多,就将首尾为01的逆序变成10,同时需要判断这个逆序字符串是否已经存在,不存在才可以将它逆...原创 2019-12-21 18:13:53 · 218 阅读 · 0 评论 -
Codeforces 1277C As Simple as One and Two
题目链接:1277C As Simple as One and Two思路:1.如果有twone,我们肯定需要去掉o;2.如果有单独的one或者two,我们去掉中间一个字符即可;(思考一下就可以知道,因为留下的oe和to不会和相邻的字符再组成one或者two)代码:#include<bits/stdc++.h>using namespace std;typede...原创 2019-12-21 18:05:37 · 155 阅读 · 0 评论 -
Codeforces 1277B Make Them Odd(贪心)
题目链接:1277B Make Them Odd思路:1.由于比较大的数字在进行n次操作后可能会和某些小一些的数字相等,相等的话就可以一起除以2,这样次数就会减少;2.那么采用贪心思想,我们每次都选取最大的数字来除2,保存过程中的数,之后如果遇到这些数可以直接跳过,那么这样我们就能得到最小次数;代码:#include<bits/stdc++.h>using nam...原创 2019-12-21 18:00:39 · 277 阅读 · 0 评论 -
Codeforces 1277A Happy Birthday, Polycarp!
题目链接:1277A Happy Birthday, Polycarp!思路:1.*位数有9个符合要求的,设我们求出给定的数字是xxx位,那一定有(x−1)∗9(x-1)*9(x−1)∗9个数符合要求;2.接下来判断xxx位数里有多少符合要求即可;代码:#include<bits/stdc++.h>using namespace std;typedef pair...原创 2019-12-21 17:55:43 · 272 阅读 · 0 评论 -
Codeforces 1243D 0-1 MST(补图的连通图数量)
思路:1.没有给出的边权值都为0,因此就是求补图的连通图数量-1;2.从1遍历到n,假设遍历到i,我们求出i所在的连通图的其它点,并做上标记,在遍历时,就跳过做完标记的点,遍历了ans次,就说明有ans个连通图;3.如何求出i所在的连通图的其它点呢?我们用双链表存储未被遍历过的点(节省时间),遍历和i相连权值为1的边,如果边的另一个端点未被遍历过,我们就做一个标记,接着遍历所有未被遍历过的...原创 2019-12-14 19:32:05 · 283 阅读 · 0 评论 -
Codeforces 1243C Tile Painting(素数)
思路:1.如果是素数,答案就是这个数;2.找出所有可以被这个数整除的素数,如果只有一个素数,这个素数即是答案;否则不同素数占有的区间必定交汇,那么只有一个颜色;代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define...原创 2019-12-14 19:18:41 · 246 阅读 · 0 评论 -
Codeforces 1243B2 Character Swap (Hard Version)
思路:1.统计所有字符出现次数,如果均为偶数,则必定可以移成一样的字符串;2.从前往后同时遍历两个字符串,如果两个位置不一样,我们设法使第二个字符串的这个位置和第一个字符串的这个位置相等;设第一个字符串此位置为a,第二个字符串这里是b,那么我们就在第一个字符串后面找a,互换一次即可,找不到那第二个字符串后面必定有a,那就利用第一个字符串后面某位置,互换两次即可;代码:#include&...原创 2019-12-14 19:12:00 · 206 阅读 · 0 评论 -
Codeforces 1243B1 Character Swap (Easy Version)
思路:如果是YesYesYes,则(1)两个字符串相等;(2)只有两个位置不相等,且同一个字符串这两个位置字符相等;代码:#include<bits/stdc++.h>using namespace std;typedef pair<int,int> P;typedef long long LL;#define fi first#define sc ...原创 2019-12-14 19:05:59 · 258 阅读 · 0 评论