![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
codeforces题解
曾英俊
这个作者很懒,什么都没留下…
展开
-
CodeForces 1025 B.Weakened Common Divisor(数论)
题意:给你 n 对数字,让每对至少出一个数字来求最大公倍数 ,如果最大公倍数是 1,则输出 -1,否则输出任意符合的最大公倍数。题解:一个数的倍数与他的因子有关,所以两个数相乘就会得到一个数包含他的所有因子(不会重复),根据这个性质我们就可以用第一个数去和每一对的乘积求最大公倍数,最后只要最大公倍数是大于 1 的就可以输出答案了。#include <algorithm>...原创 2018-08-22 01:06:14 · 211 阅读 · 0 评论 -
CodeForces - 1060C(前缀和+思维)
题意:有一个长度为 n 的 a 数组和长度为 m 的 b 数组,让这个一维矩阵相乘得到二维的矩阵,求最大子矩阵的和小于或等于 x。题解:有一道原题,区间范围是1000,时间复杂度是O(n^3),用在这里会超时。(Hihocoder 1502: 最大子矩阵)我们可以发现一个规律:一个子矩阵的和就是 (a[i]+a[i+1]+...+a[j])*(b[i]+b[i+1]+...+b[j...原创 2018-10-05 00:18:26 · 879 阅读 · 0 评论 -
CodeForces - 1051D(dp)
题解:第 i 列的状态有四种:(黑,黑),(黑,白),(白,黑),(白,白),设为0(0,0), 1(0,1), 2(1,0), 3(1,1)。dp[i][k][j]:i 表示第 i 列,k 表示有 k 种,j 表示第 i 列的状态。那么我们可以得到:dp[i][k][0] = dp[i-1][k][0] + dp[i-1][k][1] + dp[i-1][k][2] + dp[i...原创 2018-10-07 11:20:04 · 258 阅读 · 0 评论 -
CodeForces - 883K(贪心)
题解:中间可能存在的最大值是于两边值+1有关,所以我们从左和从右开始维护该点可以最多的路即可。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include &...原创 2018-10-21 00:42:28 · 231 阅读 · 0 评论 -
CodeForces - 1073C(二分)
题解:二分区间长度,去尺取每一个区间,除去这段区间的操作量,判断现操作距离目的操作所需步数与区间长度作对比,如果是偶数说明可以到达,否则不行。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <...原创 2018-10-28 13:25:14 · 309 阅读 · 2 评论 -
CodeForces - 1073D(模拟)
题解:每一圈都是有规律,像是一层一层的,也就是每一层去掉一个最大值,最多就n层。#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <stri...原创 2018-10-28 13:32:41 · 318 阅读 · 0 评论 -
CodeForces - 1084D(树形dp)
题意:有 n 个城市,每个城市都有 wi 升油。如果两个城市之间有路,则通过这条路需要消耗 c 升。问从任意地方出发(边只经过一次),可以最多获得多少升油?题解:可以将题意转化为:在一棵树上求一条路径(所有点的权值和减去所有边的权值和最大)。裸的树形dp,我们从第一个点出发进行 dfs,用 dp[i] 记录第 i 个点的权值最大,从儿子节点到父亲节点的权值取最优。即:dp[u]...原创 2018-12-15 10:45:40 · 312 阅读 · 1 评论 -
CodeForces - 862C(构造)
题意:让你输出一个长度为 n 的数组,这个数组所有元素异或和要等于 x。题解:首先我们要知道:x ^ y ^ (x ^ y) = 0,这样我们就可以推出:x ^ y ^ (x ^ y ^ z) = z => x ^ y ^ z ^ (x ^ y ^ z ^ m) = m。因此,我们可以通过这样去构造一个数组,假如:1,2,...,n - 3,保留后三位,前面从 1 到 n -...原创 2019-03-16 10:12:04 · 295 阅读 · 0 评论 -
CodeForces - 862D(二分)
题意:交互题,他会告诉你有一个只有 0 和 1 的数组的长度 n,接下来你有不多余15次操作:“? str” ?是询问操作,str就是你认为这个数组的样子,他会返回里面错了多少个,继续循环,不能超过15次。“! pos0 pos1”!是答案操作,pos0,pos1是你找到相邻 0 和 1 的的下标,结束循环。题解:不能超过 15 次操作并且长度不会超过 1000,说明就可以二分...原创 2019-03-17 14:40:07 · 231 阅读 · 0 评论 -
CodeForces - 897D(思维)
题意:交互题,有一个长度为 n 的数组,有 m 次操作,每次操作会获取机器给的一个在 1 到 c 的数字,将它填在数组中,并输出位置,数组里的数字要不递减。题解:因为 (c / 2) * n <= m。所以每一位都有可能填写 c / 2 次,当小于等于 c/ 2,我们可以采取从前往后填写,否者从后往前。#include <algorithm>#inclu...原创 2019-03-24 10:00:16 · 225 阅读 · 0 评论 -
CodeForces - 1060B(贪心)
题意:有n个人,他们希望可以坐成多个圈,并且他们要求左边要有 l[i] 个空凳子和 r[i] 个空凳子,求最少需要多少个凳子。题解:贪两个人的左和右相差不大的,即我们可以小对小,大对大,让他们可以达到最优使用空凳子,所以排序所有人的凳子,两两之间去最大的凳子即可。#include <algorithm>#include <iostream>#incl...原创 2018-10-04 23:37:17 · 243 阅读 · 0 评论 -
CodeForces - 327A(思维)
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <string>#include <vector>#include原创 2018-09-27 14:34:42 · 331 阅读 · 0 评论 -
CodeForces - 679B(dfs)
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <string>#include <vector>#include原创 2018-10-01 15:03:31 · 192 阅读 · 0 评论 -
CodeForces 548 C.Mike and Frog(循环节)
题意就是青蛙和花每秒的高度为 和 ,求h1==a1并且h2==a2 的最小时间;题解就是找到第一次h1==a1的时间t1和h2==a2 的时间t2,再求出h1==a1的循环节k1和h2==a2 的循环节k2,在找出第一次相同就是最小时间;没有循环节或者第一次h==a就输出“-1”,或者根本不相遇,就是输出“-1”。#include <bits/stdc++.h>u...原创 2018-04-23 15:32:55 · 242 阅读 · 0 评论 -
CodeForces 812 B.Sagheer, the Hausmeister(dp)
题意给你一个n层楼每层m个房间+2个楼梯道,从第一层的左楼梯口开始过一个+1min,求关闭所有灯的最短时间.题解dp记录每层楼的左右开灯房间,维护楼梯口的时间;dp[i][m+1] = min(dp[i][m+1]+2*(m+1-l), k+m+1);dp[i][0] = min(dp[i][0]+2*r, dp[i][m+1]+m+1);#include <bit...原创 2018-04-16 17:23:01 · 139 阅读 · 0 评论 -
CodeForces 934 B.A Prosperous Lot(思维)
题意输入一个n,输出一个有n个环的数,这个数在0-1e18之间。题解只要输出4或8就行了,要注意数的范围,超过就输出-1。#include <bits/stdc++.h>using namespace std;int main(){ int n; while(cin>>n){ if(n == 0 || n > 2*18){ cou...原创 2018-04-09 16:32:10 · 170 阅读 · 0 评论 -
Codeforces - 934 A.Compatible Pair(思维)
题意Banban将会从Tommy的序列中取走一个数,和自己序列的一个数组成乘积最大。但是Tommy希望Banban最终组成的数尽可能小,而且它将会提前从自己序列中取走一个数以此来达到目的。题解想找出最大值所在的ai下一次跳过他,在找出最大值输出。#include <bits/stdc++.h>#define INF 1e18using namespace std;...原创 2018-04-09 16:19:31 · 174 阅读 · 0 评论 -
CodeForces 960 B.Minimize the error(思维)
题意给你两个数字序列a,b,每个序列长度都为n,然后E=∑(a[i]-b[i])^2。现在你可以改变a,b序列中的元素k1次和k2次,每次可以使一个元素加一或者减一。使得改变结束之后E的值最小。题解用一个数组来存入abs(a[i]-b[i])的值,有k1+k2的操作(+1/-1),以绝对值从小到大排,大于的-1,小于0的+1,暴力解决,不会超时,然后在遍历平方加起来。#inclu...原创 2018-04-09 15:48:26 · 267 阅读 · 0 评论 -
Codeforces 869 A.The Artful Expedient(博弈论)
题解emmmm 看不懂...英语不行,看大意应该是博弈论 , 我就猜谁在什么情况下会赢,结果是胜者只有一个---Karen #include <bits/stdc++.h>using namespace std;const int maxn = 60005;int main(){ int n; while(cin>>n){ int a; ...原创 2018-03-28 22:38:28 · 167 阅读 · 0 评论 -
Codeforces 899 C.Dividing the numbers(思维)
题意划分1-n的集合,将其分为两个,要求两个集合的和之差最小。 求集合(任意输出)题解1+n = 2+n-1 = 3+n-2......如果是奇数对则最小差为1;如果是偶数对则最小差为0;如果是其他情况可以往后推,如2+n等等。 #include <bits/stdc++.h>using namespace std;int number[60005];...原创 2018-03-28 22:32:38 · 158 阅读 · 0 评论 -
Codeforces 892 C. Pride(思维)
题意给定一个数列,我们定义一个操作是取相邻的两个数计算其 gcd ,然后替换掉其中的某一个数,问最少多少步可以将数列全部变为 1 。题解如果数组中有1,则答案为n - 1的个数;如果数组中没有1,则通过每一个往后遍历找到最短能得到1的step,则答案为n-1+step;如果数组的所有数的gcd找不出1的话就是输出-1。 #include <bits/stdc++.h&g...原创 2018-03-28 22:09:31 · 203 阅读 · 0 评论 -
Codeforces 892 B. Wrath(思维)
题意每个人都有一个长度为 li的武器,相邻的两个人之间距离为 1 ,同一时间所有人使用武器攻击左边的人,问最后存活下来的人数。题解最后一个肯定没事,则ans = 1,从最后一个往前面遍历,以最后一个的范围遍历,找出里面最长的范围更新遍历,即当达到最大范围的最后一个人之后,加入另一个人,ans++,以他的范围继续遍历,重复操作#include <bits/stdc++.h&g...原创 2018-03-28 22:02:45 · 199 阅读 · 0 评论 -
CodeForces - 897D(二分+思维)
题意:给你一个从 1 到 n 的数组,有 q 次操作,每次操作把数组每一个元素都加 l、l + 1、...、r,求这些变化过程中不同数字的个数。题解:可以把 + l 到 + r 看成 + 0 到 + (r - l),这样就转变成了一个数组每个元素都加 1 直到加了 (r - l) 个 1。也就是说每个数都扩大区间,求总区间的长度。我们考虑每一个数的差值,如果差值小于等于要加的数,...原创 2019-04-07 11:05:27 · 208 阅读 · 0 评论