Codeforces每题题解
CF每题题解
18级的一条菜鸡
这个作者很懒,什么都没留下…
展开
-
D. Orac and Medians
题目链接 题目大意 你可以选择一连串的序列,把这一连串的序列变成他们的中位数。 给出长度为n的序列,给出要把这个序列最终变为的数k,问你能不能把序列最终变为k。 当你选的序列为偶数个时,中位数为较小的那个。 分析 最后全变成k要满足两个条件: 序列中至少要有一个数为k 序列中要有一种连续的三个数中至少有两个数大于等于k(有一个连续的三个数满足即可) 因为当你选的序列为偶数个时,中位数为较小的那个,那么如果满足条件2,一定会把其他数字变成比k大的数,然后在变化就行,一定可以成功,反之则不满足。 代码 #i原创 2020-05-14 21:40:09 · 177 阅读 · 0 评论 -
C. Orac and LCM
题目链接 题目大意 给你n个数,求这n个数两两数的lcm组成的序列的gcd 分析 对每个数进行拆分,拆成每这个数的质因子的几次方,然后把几次方的几次放进相应的质因子的队列中。然后在对每个是质因子进行循环运算。如果质因子的队列中数小于n - 1个,那么一定不包含这个质因子;如果等于n,那么相当于n个数都包含这个质因子,那么他们两两的lcm一定都包含这个质因子的次小次方,直接相乘即可;如果等于n - 1 个,那么lcm序列一定也包含这个质因子,但是要乘最小次方。 代码 问号是我对模板进行的解释,在交题的界面显示原创 2020-05-14 21:25:58 · 150 阅读 · 0 评论 -
B. Orac and Models
题目链接 题目大意 好的序列要满足选出的一系列的数的两个相邻的数,满足左边值的坐标要能整除右边值的坐标(左边值的坐标 < 右边值的坐标),并且左边的值 < 右边的值。给出n个数,要求求出满足条件的最长的序列的长度。 分析 一道dp,对每一个数,可以由他前面满足条件的数转移过来,最后求最大值即可。 代码 #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (ll i=a;i<=n;i++) #d原创 2020-05-14 21:03:21 · 407 阅读 · 0 评论 -
A. Orac and Factors
题目链接 题目大意: f(n)代表n的除1以外的最小因子,一个数n每次变换要加自身的f(n),给出第一个数n和要变换的次数k,求最终结果。(注意变化后下一次要加的数也可能不同) 分析 先求出每个数的f(n),如果第一个数是偶数,那么每次要加的值一定是二,如果第一个数是偶数,那么他加一次后的值一定是偶数,以后每次加的数也是二 代码 代码有点丑,理解了可以自己写 #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for原创 2020-05-14 20:47:21 · 154 阅读 · 0 评论