div2
xiao天_SVIP
这个作者很懒,什么都没留下…
展开
-
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 150 阅读 · 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 · 276 阅读 · 0 评论 -
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 · 199 阅读 · 0 评论 -
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 · 383 阅读 · 0 评论 -
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 · 365 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 272 阅读 · 0 评论 -
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 阅读 · 0 评论 -
Codeforces Round #672 (Div. 2)
C1 & C2题意给定一个长度为n的序列,从中按顺序选择一些下标使得加上奇数位置减去位置的值最大,最后修改某两个位置,并求出它的答案题解我们可以发现这个一定是先选∧ 再选 V 的顶点,因为选其他对这个数列只能有减少不能增大,并且第一个和最后一个一定是∧类型的所以基于这种性质我们让边界值为最小,我们就能间接的控制第一和最后一个的类型,中间的必然是一个∧一个V所以我们只需要加上∧减去V为顶点的值就可以得到答案,在后面的q次操作中同理也就最多可能改变6个点的状态,所以只需要对这六个点判原创 2020-09-26 00:35:31 · 130 阅读 · 0 评论