- 博客(38)
- 收藏
- 关注
原创 Codeforces Round #713 (Div. 3) G. Short Task
题意d(n) = ∑k (n % k == 0),求最小的n满足d(n) = c 如果没有满足的输出-1c <= 1e7思路求1 - n每个数的约数和,时间复杂度为nlogn然后在逆序推一遍 cf的评测器真好1e7 nlogn 可以过#include<iostream>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#inclu
2021-05-10 22:12:58 148
原创 Codeforces Round #707 (Div. 1, based on Moscow Open Olympiad in Informatics)
B. Two chandeliers题意给定一个长度为n的数组a和m的数组b,两个数组分别循环展示,求第k个不相同的数。n <= 5e5k <= 10e12ai ,bi<= 2 * max(n,m) a中ai 互不相同,b中bi互不相同思路再一次大循环中(len = n * m / gcd(n,m)) 当ai = x(固定值) 和bj 相同的情况最多只会出现一次,这一次满足ai = b j pos = i %n pos = j % m化简为 nx + i = my
2021-05-10 21:40:09 180
原创 Codeforces Round #710 (Div. 3)
F. Triangular Paths题意给定一个长度为n的点用(xi,yi)。从(1,1)开始,依次经过这些点,如果(x,y)x + y为奇数那么走向(x + 1, y + 1) 否则走向 (x + 1,y) 如果为奇数要走向(x + 1,y) 代价为1,为偶数走向(x + 1,y + 1)代价也为1求最小代价所有点都走一遍(保证可以依次遍历)1 <= n <= 2e51 <= x <= 1e91 <=y <= x思路如果一个点是奇数那么他之后之后
2021-05-10 21:26:10 125
原创 Codeforces Round #707 (Div. 1, based on Moscow Open Olympiad in Informatics)
A. Going Home题意给定一个长度为n的数组a,是否存在不同下标x,y,z,w 满足ax + ay = az + aw。4 <= n <= 2e51 <= ai <= 2.5e6思路如果有四个以上数是相同的,那必然是四个数如果有两对及以上两个数是相同的,那必然是其中的两对数否则的话只能枚举,直到有两个数相同,枚举每个数的个数上限为2,最多只会枚举 2 * ai (上限5e6)代码#include<iostream>#include&l
2021-05-10 21:09:46 235
原创 Educational Codeforces Round 106 (Rated for Div. 2)
D. The Number of Pairs题意t次询问中输入c,d,x求满足 c * lcm(a,b) - d * gcd(a,b) = xa,b的个数。1 <= t <= 1e41 <= c,d,x <= 1e7思路c * lcm(a,b) - d * gcd(a,b) = x转换为c * (a * b / gcd(a,b)) - d * gcd(a,b) = x同除gcd(a,b)c * (a * b / (gcd(a,b) * gcd(a,b))) =
2021-05-10 20:56:22 158
原创 2020-2021 ICPC, NERC, Northern Eurasia Onsite (Unrated, Online Mirror, ICPC Rules, Teams Preferred)
D. Digits题意给定一个长度为n的数组a和一个k,求数组中最大的元素乘积的尾数为k(每个元素只能用一次),输出方案数 1<= ai <= 1000 1 <= n <= 1e5 0 <= k <= 9思路很容易想到是01背包求方案数,但是乘积很大会爆long long,log x 也是满足递增情况,和乘积的递增表示类似,能够很好的把 * 转换为 +。代码#include<iostream>#include<cstring&
2021-05-10 20:30:11 787
原创 Codeforces Round #705 (Div. 2) D. GCD of an Array
题意给定一个长度为n的数组a,q个操作,每次使第k个数 * x,求每次操作之后的数组所有元素的最大公约数,ans % (1e9 + 7)。1 <= n ,q<= 2e5 ,1<= ai <= 2e5, 1 <= x <= 2e5思路刚开始以为用线段树维护,但是会爆long long,天真的想每次除去这次的gcd,用个变量来记录每次答案,但是每个数也会爆long long。用multiset来维护每一位的每个质数的个数来变化(方便找最小值,最小值也就是gcd的
2021-05-10 20:22:47 111
原创 Codeforces Round #710 (Div. 3) G. Maximize the Remaining String
题意给定一个字符串s只含小写字母,有一个操作选择两个s中字符相同的位于不同下标的元素,删除其中的一个。求最后s中的元素每个字符唯一,且最大(相对于其他生成的)。思路最后的存在的元素为s中的全部字符种类。s中的元素最多有26种,最后的长度必然小于26所以我们可以暴力枚举每一位,每位从大到小枚举,这个字符可以选择的条件为:1.这个字符在s中出现过,且之前没选2.这个字符在上个字符之后出现过3.根据贪心,这个字符的位置应该为上个字符位置之后的第一个,这个位置不能大于之前没选过的最大位置,因这样
2021-05-07 20:17:39 115
原创 Codeforces Round #715 (Div. 1) B. Almost Sorted
题意一个almost sort 是指最后的序列满足 ai+1 >= ai - 1排序的元素为 1,2,3…n,给定一个k求第k小的almosrt sort 序列。思路他有一个性质对于每个点,他之后的点可以是比他小1的对于这个性质如果我们选了一个k,那之后的序列必须为 k - 1 到 1之间的没有被选中的序列,要不之后比他大的点不会存在这个性质。所以长度为n的k + 1,k + 2,k + 3…k+n序列的方案数为,选择k + 1,方案数为 f[n - 1]选择k - 1 方案数为f[n
2021-05-07 20:00:50 369
原创 Codeforces Round #713 (Div. 3)F. Education
题意需要购买一个玩具费用为c,他有一个机器,每使用一天会给他一定的费用,机器的有n个等级,等级越高的得到的钱也会等多,等级为i得到的钱为ai(ai+1 >= ai),初始时刻机器的等价为1,机器每次升级需要花费bi,他在每天可以有两种操作:1.使用机器,获得ai的钱2. 给机器升级花费bi (必须他的钱最够多才能升级求最少需要多少天。思路最小需要的天数,且是一个单调问题所以可以使用二分来算,二分天数判断第mid天对应各个等级能够生成钱能否大于c,在这之前就需要先知道升级的i需要的最小天数
2021-05-07 19:44:49 175
原创 Codeforces Round #719 (Div. 3) G. To Go Or Not To Go?
题意给定一个n * m的矩阵,需要从(1,1)走到 (n,m)。相邻两个点之间的距离为w,矩阵中的每个点有一个值,即aij, 如果aij<0,代表不能走,对于aij > 0的相当于一个传送们,传送的点必须也是传送门从(i,j)到(x,y)的代价为aij + axy。求最小代价。1<= w <= 1e9 n,m <= 1e3思路首先,传送次数最多为1,因为从一个点到另个点如果被传送多次还不如直接从第一次位置传送到最后一次位置, 中间的过程的代价肯定为正数,可以省去。所以
2021-05-07 19:30:49 113
原创 Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) E. Skyline Photo
题意给定n个建筑,每个建筑的高度为hi,每个建筑有一个美丽值为bi,给这些建筑拍照,拍照的要求是每次拍照的建筑必须是连续的,每个建筑只能且精确的出现在一张照片,每个照片的美丽值为这个照片里面的建筑最低的美丽值。求所有照片的美丽值之和最大。n<=3e5 -1e9 <= bi <= 1e9思路以第i张建筑为结尾拍照,可以分为考虑第i个的值,不考虑第i个的值,考虑的话有两种情况,1.自己一张照片 2.和前面连续的都比它高的在一张照片,不考虑是从前面比它小的在一张照片定义f[i]表示以
2021-05-07 00:48:35 156
原创 Codeforces Global Round 14 D. Phoenix and Socks
题意有n(偶数)只袜子,前l只是左脚的,后r只为右脚的,每个袜子都有一个颜色,需要把所有的袜子成对(每个袜子必须有一个左脚和一个右脚相对应,且颜色相同)可以通过一些操作来实现,每个操作需要1元1.给一个袜子换一个颜色2.给一个左脚的袜子变为右脚的3.给一个右脚的袜子变为左脚的求最小代价思路两个袜子成对有4种情况1.一个左脚和一个右脚相同的 代价为02.一个左脚和右脚不同的 代价为13.两个左脚相同的 代价为14.两个右脚相同的 代价为15.两个左脚不相同的 代价为26.两个右
2021-05-04 01:43:07 304 1
原创 Codeforces Global Round 14 E. Phoenix and Computers
题意给定n台电脑,可以按照不同的顺序打开电脑,如果第i台电脑和第i+1台电脑被打开,第i台电脑将自动打开(在没有被开启的情况下),有多少种不同的方案来打开所有电脑。输入输入两个数,表示电脑个数,和答案的取模数(质数)总数小于400输出所有的方案数思路比赛的时候一直在想通过前面一个数选和不选来转移方程,一直搞不定题解是向前选了多少个连续的数,来转移方程如果是连续k个数都没有被默认打开的方案数为 2k-1如果先打开第一个数,后面的数必须按顺序打开情况为 C(k - 1,0)如果先打开第二个
2021-05-04 01:27:57 255
原创 Divide by Zero 2021 and Codeforces Round #714 (Div. 2) E. Cost Equilibrium
题意一个序列是好的序列,满足可以通过下面的操作使得这个序列的所有元素都相等。操作:选择序列中的两个下标i,j,在选择一个x(0 < x <= ai),ai - x,aj + x,这个操作有一个代价为|i - j| * x,且每次操作之后在之后的操作中,不能给ai执行增加x的操作,不能给aj执行减去x的操作。一个平衡的序列是指把一个序列变为好的序列的最小代价和最大代价相等。输入输入一个n表示序列长度,下面一行输入n个数表示这个序列。输出可以对这个序列重新排序,询问最后有多少序列个是满
2021-05-02 00:57:48 192
原创 Divide by Zero 2021 and Codeforces Round #714 (Div. 2) D. GCD and MST
题意在一个长度为n的数组之间建立一个最小生成树,默认相邻两点间的距离是p。如果两个点i,j(i < j)之间满足 gcd(ai,ai+1,…aj) = min(ai,ai+1,…aj)。则ai到aj 之间有一条长度为gcd(ai,ai+1,…aj)的路,求最小生成树的总长度。思路满足最大长度的 gcd(ai,ai+1,…aj) = min(ai,ai+1,…aj) 这个值如果为ak 那么i,j之间每个点(除了k)到k都存在一条ak的边,且他们都是ak的倍数。且ai-1,aj+1一定不是ak的
2021-05-02 00:09:31 156
原创 CodeCraft-21 and Codeforces Round #711 (Div. 2) D. Bananas in a Microwave
题意有一个k,最初为0,有n个操作。操作分为两类:输入t,x,y (x为浮点数)当t = 1,可以对k进行 a次任务(0 <= a <= y)每次任务为 k = (k + x)向上取整当t = 2, 可以对k进行 a次任务 (0 <= a <= y))每次任务为 k = k * x 向上取整必须严格从1-n的进行每种操作且每个操作只能一次输出当k为 i(1 <= i <= m)时,最少进行的操作数不存在输出-1。n <= 200 m <=
2021-04-30 22:11:51 169 1
原创 CodeCraft-21 and Codeforces Round #711 (Div. 2) C. Planar Reflections
题意给定一个衰变期为k的粒子,依次穿过n个墙(从左到右),每次穿过一个墙,都会在运动的反方向生成一个衰变期为k -1 的粒子,这个粒子仍保持原来的衰变期和方向穿下一个墙,生成的粒子沿反方向穿墙。直到粒子的衰变期为1时不在生成粒子。给定一个n和k输出最后所有的粒子数。n <= 1000 k <=1000样例思路根据时间复杂度,大概为O(nk)所有根据复杂度每次枚举衰变期k来确定第i个墙和第i + 1之间的墙之间的的个数。这个个数可以表示为衰变期为k+1朝该方向粒子个数,可以按照最开
2021-04-30 21:40:38 246 1
原创 Codeforces Round #712 (Div. 2) E. Travelling Salesman Problem
题意给出n个点,每个点值a 和 c,需要从一号点出发每个点恰好走一次,最后回到1号点。从第i号点到第j号点之间的花费为max(ci,aj - ai).n <= 1e5求最小花费思路从一号点经过每个点走了一圈,无论从圈上的哪个点走都是走这个圈最终的最小花费都一样。所以可以从任意点走。因为从每个点的走的最小费用都为ci ,在不考虑ci的情况下从i到j的费用为max(0,a[j] - a[i] - ci);根据这个式子可以发现到比自己小的ak的花费为0,到比自己大的ak 需要满足ak - a
2021-04-30 21:13:42 149 1
原创 Codeforces Round #712 (Div. 2) C. Balance the Bits
题意给定一个长度为n(n为偶数)的01字符串s来形容两个只含’(’,’)‘的字符串a,b 当si = ‘0’,ai != bi,反之ai = bi。且a,b的每个’(’ 都有一个’)’ 与之对应,如果没有输出"NO",否则输出"YES"和方案思路1.先去除不符合的情况可以把前括号看做+1,后括号看做-1,总数应该为0,只看si为1时a字符串的值和b字符串的值相等,只看si为0时a串和b串互为相反数,因为总数为0,所以si为1和为0的总数都为0,都需满足偶数且每个字符串一半为’(’,一半为’)’2.
2021-04-30 20:39:26 108 1
原创 Educational Codeforces Round 108 (Rated for Div. 2) D. Maximum Sum of Products
题意给一个长度为n的数组 a 和 b,最多有一次操作翻转a中的一段连续的序列,使得∑ai * bi 最大 n <= 5000思路n = 5000 很容易想到是n2 的算法,如果单纯的枚举i,j是O(n3),所以考虑枚举顺序使得可以用到上次的结果,很容易想到以一个点为中心翻转,类似暴力枚举回文串。代码#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#
2021-04-30 00:35:50 275
原创 Educational Codeforces Round 108 (Rated for Div. 2) C Berland Regional
C Berland Regional题意有n个学校和n个学生,每个学生有一个技能值且每个学生属于一个学校(可以有多个学生属于一个学校),每个学校把k个学生分为一组(从高到低,剩余不够k个忽略),一个地区的水平为所有组的学生技能值之和。求k从 1 - n 的地区水平 n <= 2e5思路当去k时 很明显答案 各个学校的总技能值减去最小的的 学校总数%k 个人的技能值之和,如果直接遍历的时间复杂度为 O(n2)的,但是只有n个人并不是所有的学校都有用,可以用一个unordered_set来维
2021-04-30 00:35:26 198
原创 Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) A - D,F
B. Saving the City思路因为炸弹爆炸会引起所有相连的炸弹爆炸,点燃炸弹的成本是a,放置的成本是b,我们可以用dp的思想,f[i][0],f[i][1]f[i][0]表示当前位置之前没有炸弹f[i][1]表示当前位置之前有一段连续的炸弹转移方程见代码,可能有些没必要但是为了怕忽略了某种情况都写上了。代码#include<iostream>#include<cstring>#include<cmath>#include<algori
2020-11-03 00:40:06 380
原创 Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)
C#include<iostream>#include<cstring>#include<algorithm>#include<set>#include<map>#include<unordered_map>#include<cmath>#include<unordered_set>#include<queue>using namespace std;#define int lo
2020-11-01 21:12:05 360
原创 第十一届蓝桥杯第三场软件类省赛 C++ 题解
试题 C: 车牌A 市的车牌由六位组成,其中前三位可能为数字 0 至 9,或者字母 A 至 F,每位有 16 种可能。后三位只能是数字 0 至 9。为了减少攀比,车牌中不能有连续三位是相同的字符。例如,202020 是合法的车牌,AAA202 不是合法的车牌,因为前三个字母相同。请问,A 市有多少个合法的车牌?答案:4002750思路暴力枚举每一位的所有情况16 * 16 * 16 * 10 * 10 * 10 = 4096000情况很少代码#include<iostream>
2020-10-28 21:48:50 1180 1
原创 Educational Codeforces Round 97
A. Marketing Scheme思路给定一个l,r。使得l,r之间的数模a之后 >= a/2 ,首先肯定要大于r,否则必然有等于0的,又要保证 a/2 最小,所以a只能是r + 1。如果能满足就成立,否则不成立。代码#include<iostream> using namespace std; int main(){ int T; scanf("%d",&T); while(T--){ int l,r;
2020-10-28 20:16:10 157
原创 Codeforces Round #677 (Div. 3) A - G
Codeforces Round #677 (Div. 3)A. Boring Apartments思路设相同的数的数为n位数为k,可以很明显看到答案为 (n - 1) * 10 + (1 + 2 + 3 ···+ k )代码#include<iostream> using namespace std; int main(){ int T; cin >> T; while(T--){ int n; scan
2020-10-22 13:16:15 195
原创 Educational Codeforces Round 96 (Rated for Div. 2) A - E
A. Number of Apartments思路因为5 % 3 = 2, 7 % 3 = 1,所以只要不是1,2,4,都能满足如果n % 3 = 1,选择一个7剩余全选3,同样 n % 3 = 2,选择一个5,剩下全选3,n % 3 == 0,全选3代码#include<iostream> using namespace std; int main(){ int T; scanf("%d",&T); while(T--){ int
2020-10-12 22:32:41 159
原创 Codeforces Global Round 11 A B C
A. Avoiding Zero题意给定一个长度为n数组,让你对数组的元素重新排序,使得对于每个i(1<=i<=n)都满足前缀和不为0.思路如果整体和为0,那么肯定不会满足,如果整体和不为0,必然是负数的绝对值不等于正数的绝对值,哪个大就把哪个放在前面即可代码#include<iostream>#include<algorithm>using namespace std;const int N = 55;int a[N];int main(){
2020-10-11 13:42:58 264
原创 2019-2020 ICPC Asia Hong Kong Regional Contest B D E G J
B.Binary Tree题意给定一个二叉树,每次Alice和Bob可以取走一个完全二叉树,直到完全不能取为止,第一个不能取得为输,求那个输思路这是一个博弈论,我们先分析他最基础的性质,一个完美二叉树是2k -1,很明显他是一个奇数,最小的完美二叉树就是一个叶节点,所以最终结果必然是全部取完的,且每次取必然是奇数,所以我们就能得到如果是奇数,那么Alice 获胜,反之Bob代码#include<iostream>using namespace std;int main(){
2020-10-08 18:32:25 2394 2
原创 Codeforces Round #675 (Div. 2) A - D
A. Fence题意为了组成一个四边形,给定三边的长度,求最后一个边的长度思路我们可以想一下,当一个边固定,其余两个边分别在这个边的两个端点,且边在一边,只有有这个边的角度越大,第三个边越大,当为180°,就会成为一个直线,所以只需要小于三边之和就可以满足不是一个直线的情况,且为最大的可能,必然满足情况代码#include<iostream> using namespace std;#define int long longsigned main(){ int T;
2020-10-05 21:07:49 270
原创 ACM-ICPC 2017 Asia Nanning
A. Abiyoyo、题意输出n个Abiyoyo, Abiyoyo.在输出两个Abiyoyo, yo yoyo yo yoyo.代码#include<iostream>using namespace std;int main(){ int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); while(n--){
2020-10-03 20:54:50 228 1
原创 Grakn Forces 2020 A - D
1408A - Circle Coloring题意给定长度n为三个数组a,b,c其中ai != bi != ci 从中选择一个收尾相连的数组是数组的第i为元素是ai ,bi 或ci 的一个,但相邻的元素不能相同思路很简单的一道模拟题,可以从下标为1开始找只要保证这个数和他前面的一个数不相等就可以,最后一个数特判一下,因为ai != bi != ci 所以每个数是必然满足条件的代码#include<iostream>#include<cstring>#include&l
2020-10-03 14:42:30 176
原创 Codeforces Round #674 (Div. 3) D,E,F
D题意给定一个长度为n的数组,每次操作可以给两个数加一个任意的数,目的是最少的操作使任意的连续子串的和不为0思路我们可以从前往后用贪心的思路,找到一个点如果他和前面的子串和为0,那么我就给这个点的前面添加一个数,可能不太会证明,但是思路就是这样的我们只需要统计出这个点到上一个前面加过操作点的之间的所有点的前缀和,可以放在set里面,如果set里面有这个点的权值,就说明这个点前面的子串有和为0的,即进行一次操作,然后以这个点为开始继续重新计算,直到最后一个点代码#include<iostr
2020-09-30 14:03:10 220
原创 Codeforces Round #673 (Div. 2) D 和 E
D题意给定一个长度为n为的数组,并且a[i] >= 1 每次可以选择两个数一个为 i,j 并选则一个x给 a[i] -= x * i, a[j] += x * i 最终是所有的元素大小都相等,并且每次操作完之后所有元素的大小都是非负的题解我们可以发现每次都是给整个数组加上一个数减去一个数,数组的总大小不变所以只有当所有元素的和是n的倍数才能满足条件,至于操作我们可以客观的想因为只有第一个数是我们可控(即他是所有数的约数),所有我们就可以先把所有的数都变为0,然后在变为 sum /
2020-09-28 19:32:03 175
原创 Codeforces Round #672 (Div. 2)
C1 & C2题意给定一个长度为n的序列,从中按顺序选择一些下标使得加上奇数位置减去位置的值最大,最后修改某两个位置,并求出它的答案题解我们可以发现这个一定是先选∧ 再选 V 的顶点,因为选其他对这个数列只能有减少不能增大,并且第一个和最后一个一定是∧类型的所以基于这种性质我们让边界值为最小,我们就能间接的控制第一和最后一个的类型,中间的必然是一个∧一个V所以我们只需要加上∧减去V为顶点的值就可以得到答案,在后面的q次操作中同理也就最多可能改变6个点的状态,所以只需要对这六个点判
2020-09-26 00:35:31 130
原创 hdu6705 path
hdu6705 path题目链接题意有n个点m条边的图,针对q次查询找到每次查询对应的从小到大的边的长度思路可以通过离线的做法找到每种小于查询的所有条边,可以通过给每个点的对应边排序,通过优先队列加入所有点连接的最短边,第一次查询必然在其中然后下一扩展有两个方向,一个是他的下一个边,一个是他的找到的点的第一条边依次扩展就能找到答案代码#include<iostream>#include<cstring>#include<queue>#incl
2020-09-22 20:35:58 107
原创 2019CCPC网络赛——array(权值线段树)
2019CCPC网络赛——array(权值线段树)题目地址题意 两种操作 1. 给 a[i] + 10000000 2. 查找不存在 在a[1 ~ r] 中 且不低于k的数 思路在第一个操作时 由于k的范围不够 就相当于把 a[i] 删除掉即a[i]的下标变为无穷大 而对于第二种操作 也就是 等价为在 k之后 的下标的大于r 的 可以使用权值线段树用来维护当前区间最大的 下标 如果当前的右端点 大于等于k 且
2020-09-21 21:07:24 140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人