比赛链接:Dashboard - Codeforces Round #827 (Div. 4) - Codeforces
目录
A Sum
B Increasing
C Stripes
D. Coprime
E Scuza
F Smaller
G Orray
A Sum
题意:给定三个数,问是否存在其中一个数为另外两个数字的和。
思路:直接判断最小的两个数加起来是否等于最大的数即可。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include
B Increasing
题意:给定一个长度为 n 的整数数组,判断是否可以重新排列他们,使得数组严格递增。
思路:利用map判断数字是否重复即可。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include
C Stripes
题意:给定一个 8×8 的网格,其中 . 符号表示空,'R' 符号表示红色,'B' 符号表示蓝色。
每次可能水平地画一道红色,或者垂直地画一道蓝色,后面画的会覆盖前面画的,给出最终结果,问最后画的是什么颜色。
思路:循环判断哪一行或哪一列全是通一个颜色即可,需要注意的是R只能横着涂,B只能竖着涂,像下面的样例:
![Codeforces Round #827 (Div. 4) A~G_第1张图片](http://img.e-com-net.com/image/info8/e52de2e9badc4d64bf85519abf23ac28.jpg)
它的完成方法应该是先涂满B再涂R,所以他的答案应该是R而不是B。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include
D. Coprime
题意:找到下标和最大的两个互质的数。
思路:因为n的范围很大是2~2e5,如果直接枚举会超时,但是可以发现数字大小不超过1000,就算是双重循环也只是1e6并不会超时,所以我们将数字存入map里面,枚举输入中出现过的数字,两两判断数字的gcd是否为1,并且取两两合法的数字的下标最大值即可。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include
E Scuza
给定一个长度为 n <= 2e5 的数组 a[i],表示每级台阶的高度。
给定 q<=2e5 个询问,每个询问给出 k 表示一次最多能跨越的高度,问从 0 开始最多能爬多高。
思路:定义一个sum数组表示台阶高度的前缀和,a[i]数组更新为前i个a[i]的最大值(比如台阶的样子是3 1 4,如果能跨过中间的1那么前面的3也一定能跨过,此时将1更改为3,方便二分查找,因为二分查找是在有序的数组中进行的),最后需要找到最后一个可以跨越过的台阶。我们可以使用upper_bound函数来找到第一个跨越不了的台阶,因为第一个跨越不了的台阶的前一个台阶就是最后能跨越的台阶,最终得到台阶下标k输出前缀sum[k-1]即可。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include
F Smaller
题意:给定两个字符串 s, t,初始时全为空。
有 q<=2e5 次操作,每次操作选择其中一个串,给定 k <= 2e5,str,往后添加 k 个 str。并询问是否存在一种方式重排 s,t 的字符,使得 s 的字典序严格小于 t 的字典序。
思路:
1. 当字符串t中有不是a的字符时
(1)只要将这个字符放在字符串t的开头,字符串t就一定比字符串s大(因为s的开头是a)
2.字符串t中全是a时
(1)若字符串s也全是a,那就比较两个字符串的长度来判断哪个大
(2)若字符串t全是a而字符串s不全是a,那么字符串s就一定比字符串t大。
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include
G Orray
题意:给定长度为 n <=2e5 的数组 a[i],构造 b 数组,其中 b[i] 为 a[1] ... a[i] 或运算的值。要求重排 a[i] 使得 b[i] 的字典序最大。
思路:这题可以说是道暴力题,首先a数组第一个肯定是数组里最大的值,这样b数组的字典序才能最大,再从a数组后面循环遍历,与前面的已经确定顺序的数字进行或运算,找出使确定数组的增长量最多的数字即可。当然只是这样还是会超时:![069180ffe05347ab9797be34d10a516f.png](http://img.e-com-net.com/image/info8/d8190cf7c9604980bc94732b7349657b.jpg)
我们需要剪枝,若往后面找的时候没有数字能使或和增长了,就退出循环,因为既然或和不会增长了,后面的数字怎么排或和的最大值都不会改变。
![accc3f3bf8b5472eb4a0fddb1202c78e.png](http://img.e-com-net.com/image/info8/62fb798f6f7145e18cad37b5c80b0e06.jpg)
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#include
#include