Codeforces
文章平均质量分 77
_Jyq
这个作者很懒,什么都没留下…
展开
-
The 18th Zhejiang Provincial Collegiate Programming Contest F D B
linkF. Fair Distribution看到数据范围应该想到与根号有关,那么分两种情况讨论:①:机器人个数<sqrt(x)②:机器人个数>sqrt(x)---->机器人平均能源数<sqrt(x)分别枚举即可。#include<bits/stdc++.h>#define mp make_pair#define pb push_back#define SZ(x) (int)(x.size())#define all(x) x.begin(),x原创 2021-05-09 00:55:35 · 532 阅读 · 0 评论 -
cf 1485 F Copy or Prefix Sum 奇怪的dp
link题意有一数组BBB,求满足以下条件的数组AAA的个数B[i]=A[i],ORB[i]=∑j=1iA[j]B[i]=A[i] ,OR \\B[i]=\sum_{j=1}^{i}A [j]B[i]=A[i],ORB[i]=j=1∑iA[j]题解dp[i][j]dp[i][j]dp[i][j]表示∑k=1iA[k]=j\sum_{k=1}^{i}A[k]=j∑k=1iA[k]=j的方案数,那么显然有n2log2nn^2\log_{2}^{n}n2log2n的转移方程dp[i][j]原创 2021-02-14 21:59:54 · 257 阅读 · 1 评论 -
cf 1450 F The Struggling Contestant
link题意:给一长度为n的数组A,求以排列p满足A[pi],A[pi-1]不同,定义每一个排列的权值为abs(pi-pi-1) >1 的i的个数。输出满足条件排列的最小权值。无解输出-1思路:如果不考虑权值的话就是一个插数的过程,那么有解的情况就是出现次数最多的数要小于(n+1)/2。考虑怎么构造权值最小的排列。首先对于ai==ai-1的这些位置是一定要分开的。记为k,那么此时最小可能的答案就为k(翻转,重拍每个排列后每个端点的代价都为1),考虑什么情况下这个k会变大,无非就是某个数作为端点的原创 2020-12-10 12:42:44 · 273 阅读 · 0 评论 -
codeforces 1442 D Sum 可撤销01背包QwQ
link题意:有n个单调不减数组,求从这n个数组中选择k个数的最大和,(只能拿数组的一个前缀)n,k<3000思路:因为数组是单调的,所以能得到一个结论就是我们最多只会拿不全一个数组(当有两个数组都拿一部分时,那么肯定可以通过减少某个数组拿的数字去拿另一个数组来增大这个和)。所以我们就可以通过枚举哪个数组不全选,然后对剩下的数组跑01背包,在枚举当前数组选几个来更新答案,但可惜这是O(nnk)的,有一个巧妙的优化就是,我们分治整个区间,对于一个l,r维护不选这个区间内的数字的dp值。那么当原创 2020-11-09 20:44:16 · 457 阅读 · 0 评论 -
Educational Codeforces Round 97 (Rated for Div. 2) F ,G
linkF: Emotional Fishermen题意:n个数,求这n个数满足下面要求的排列数量max[i-1]2<=a[i] OR max[i-1]>=2a[i]思路:对于每一个前缀来说,出现的数字个数最多为 num[max[i]]+1,其中num表示max[i]>=a[j]的j的数量。所以有dp[i]表示最大值为ai时的方案数转移方程为:dp[i]=sigma(dp[j]A(n-num[j]-2,num[i]-num[j]-1))其实就是在更新前缀最大值时,考虑他所原创 2020-10-30 19:03:22 · 223 阅读 · 0 评论 -
D. Bouncing Boomerangs 模拟
link题意:n*n的矩阵,上面放着障碍物。现在有一个人分别在第i列投掷一个飞镖,沿着投掷方向前进,在遇到障碍物时会向右转弯,直到飞出矩阵。现在给你在每列投掷飞镖遇到的障碍数Ai<=3。还原障碍物所在位置,要求每行每列障碍物不能超过2个。思路:由于在考虑如何放当前列的障碍物时要考虑当前咧后面的列的障碍物是怎样放的,所以要从后往前枚举每一列来放障碍物,ai=1时在当前列随意放一个就行ai=2时那么只能放在i之后的j使得aj==1并且每个j只能用一次ai=3时有两种情况:1.放在之后的aj=原创 2020-10-23 10:53:50 · 156 阅读 · 0 评论 -
Codforces 1248 G Lucky Numbers (多重背包)
题意:把n划分成k个数,求最大价值,每个数的价值 由Fi和该数的第i位上是否为3的倍数决定。给定k<1e6,Fi i<6。Q次询问n思路:按位考虑的k个数的贡献,那么可以将第i位看成容量为3k的背包,就是一个多重背包,可以用二进制优化,但是这样直接分有问题。因为只能在3的倍数之间转移。那只需要先直接求出每个数的价值,然后背包容量就变成了3(k-1)接着转移就可以了。#include<bits/stdc++.h>using namespace std;typedef long原创 2020-10-21 19:40:21 · 158 阅读 · 0 评论 -
CodeForces 1417 F Graph and Queries 无向图连通块问题转化为树上问题 重构树
link题意:给一无向连通图,每个点有一个权值,q次操作 每次操作有两种1,v 寻找v所在连通块内权值最大的点,并输出这个权值并且把改点权值变成02.x 删掉第i条边思路: 查询图上连通块内最大值和修改我们只学过在一棵树上利用dfs序,然后线段树维护。那么考虑如何将此题转化成一棵树。我们把删边考虑为倒着加边。在加边过程中利用并查集维护连通块。并且将每一时刻每一个点的连通块转化为一颗’子树’,这样在查询的时候就可以通过查询子树点权最大值来得到结果。如何将各个时刻的连通块转化为一颗树?只需要在加原创 2020-10-03 22:32:02 · 856 阅读 · 0 评论 -
Grakn Forces 2020 D E F
Dn个人,m个摄像坐落于二维平面上,x,y位置摄像能监视到的范围为(0 x, 0 y)每次移动可以选择将所有人x+1,或者将所有人y+1;问最少移动次数使得所有人都不在监视范围内;坐标<1e6考虑枚举操作x+1多少次,然后O1计算此时还需要操作y+1多少次来更新答案。mx[i][j]表示第i个人执行x+1 j次后还需要执行 y+1 的次数。那么所有人执行j次x+1后 还需执行y+1 的最少次数就为 max(mx[1~n][j]) 预处理即可。EMST 好题题意:有m个由1~n中的若干不同原创 2020-10-01 10:16:25 · 1690 阅读 · 2 评论 -
codeforces 1392 F Omkar and Landslide
link题意:有一长度为n的单调递增序列 。现在这个序列很不稳定,每秒钟都会发生如下变化:如果满足a[i]+1<a[i+1] 那么a[i]++,a[i+1]–。求最终序列。由于保证单调递增,所以说,只要有一个位置发生+1的变化,那么这个影响会一直传递到1。直到a[1]=a[2],此时,若在发生变化会使a[2]++。那么可以发现最后的序列为一个公差为1的等差数列,但是其中允许有一对相同的数字。那么求和 直接模拟即可最后的a[i]=i-1+(s-n*(n-1)/2)/n+(s-n*(n-1)/原创 2020-08-19 16:58:16 · 169 阅读 · 0 评论 -
Code forces 1367 Flying Sort
找x,x+1,x+2,…x+k这样的子序列,其中首尾不必全部 出现,中间必须全部出现分三种情况dp#include<bits/stdc++.h>#define ls rt<<1#define rs rt<<1|1#define pb push_back#define all(x) (x).begin(),(x).end()using namespace std;typedef long long ll;typedef vector<int>原创 2020-06-22 21:02:29 · 173 阅读 · 0 评论 -
CodeForces Round #549 U2
考虑每一个点可得 bx+c>=y-xx有左侧直线在点{x,y-xx}上方,维护上凸壳即可#include<bits/stdc++.h>#define ls rt<<1#define rs rt<<1|1#define fi first#define se second#define pb push_backusing namespace std;typedef long long ll;typedef vector<int> VI;原创 2020-06-16 16:59:55 · 103 阅读 · 0 评论 -
Codeforces Round #549 (Div. 2) E. Lynyrd Skynyrd
链接倍增 :当前点要找的下一个点是固定的,利用倍增加速注意初始化和遍历顺序#include<bits/stdc++.h>#define ls rt<<1#define rs rt<<1|1#define fi first#define se second#define pb push_backusing namespace std;typedef long long ll;typedef vector<int> VI;typedef p原创 2020-06-16 15:19:56 · 109 阅读 · 0 评论 -
codeforces 645 Are You Fired?
链接令s[i]=a[i]+…+a[i+k-1],s[i+1]=a[i+k]-a[i],s[i+2]=a[i+k+1]-a[i+1]则转变为所有前缀和最小值 >01️⃣.k>=n/2 ----> s[1]=a[1]+.,…+a[k] , s[2]=x-a[1] , s[3]=x-a[2];把s[1]->0后取减缀和 的前缀min M[ ],则 a[1]+…+a[k]+M[n-k+1] 即为最小值2️⃣k<n/2令s[i]=a[i]+…+a[i+k-1]&g原创 2020-05-27 16:58:24 · 154 阅读 · 0 评论 -
Codeforces Global Round 1 Magic Stones
链接很有意思的规律:将:b->a+c-b 之后的查分数组:a,c-b,b-a本来的差分数组:a,b-a,c-b可以发现,题目的操作就是交换 差分序列的操作,所以问题就转化为怎么交换原数组的差分序列,使其和目标序列的差分序列使相等的。那么我们只需要需处理出两个序列的差分序列,排下序后判断就可以了第一个数和最后一个数是不可以改变需要特判一下#include<bits/st...原创 2020-04-29 22:37:26 · 131 阅读 · 0 评论 -
Educational Codeforces Round 86 (Rated for Div. 2) E - Placing Rooks
链接想使所有格子全被覆盖,要么所有行都有棋子,要么所有列都有棋子。假设现在是所有行都有棋子,那么其中k对棋子互相攻击就可以看成n-k列放n个棋子。那么答案就为2*C(n,n-k)把n个物品放n-k个集合的方案数。最后一项为第二类斯特林数,记S{n,k}为n个物品放k个集合的方案数公式:S{n,k}=sigma{C(k,i)(k-i)^n (-1)^i} 0<=i<=k递推公...原创 2020-04-27 11:48:57 · 366 阅读 · 1 评论 -
Codeforces Round #635 Kaavi and Magic Spell
链接考虑S串中第i个字母的贡献,那么我们就可以记录一下前i-1个字母组成的各个区间的个数dp[i] [j] 表示T串的i~j区间匹配 出现的次数,那么当加入第i个字母时,所有长度为i-1的dp区间答案已经得到,所以我们在T串中直接枚举所有长度为i的区间,即为当前字母的贡献。转移方程:dp[l][r]+=dp[l+1][r] s[i]==t[l] || l>mdp[l][r]+=dp...原创 2020-04-17 11:59:34 · 200 阅读 · 0 评论 -
Educational Codeforces Round 85 (Rated for Div. 2) E Divisor Paths
链接最短路:x->gcd(x,y)->y然后就是一个有重复数字的错排问题,设每种数字分别出现k1,k2,k3…kp次,并假设该错排的答案为f那么f*k1!*k2!k3!…*kp!= ( sigma(ki) )!#pragma GCC optimize(2)#include<bits/stdc++.h>#define ls rt<<1#defin...原创 2020-04-12 10:33:36 · 173 阅读 · 0 评论 -
Codeforces Round #630 (Div. 2) F. Independent Set 树形dp
链接显然一颗树的独立集可以很容易的转移过来dp[u][0]=∏(dp[v][0]+dp[v][1])dp[u][1]=∏(dp[v][0])最后答案为dp[1][0]+dp[1][1]加上子集其实就相当于在转移的时候把当前边断开的贡献加上去就可以了,可以得到dp[u][0]=∏(dp[v][0]+dp[v][1]+dp[v][0]+dp[v][1])dp[u][1]=∏(dp[v]...原创 2020-04-07 12:00:10 · 260 阅读 · 0 评论 -
Codeforces Round #630 (Div. 2) E. Height All the Same 思维
链接操作1可以将所有的高度变成0 or 1(像俄罗斯方块一样)并且这其中的0和1可以全局互换操作2和操作1可以移动这些1,并且将相邻的0 0 -> 1 1那么问题就转换成,放置偶数个位置0,或偶数个位置1所以当n*m%2==1时 0和1总会有一个是偶数否则,也可以简单的构造出一个组合数公式,并化简为(a+b)^c的组合形式思考问题的方向是个很重要的东西,一道题能不能快速的解出...原创 2020-04-01 17:44:15 · 217 阅读 · 0 评论 -
Codeforces Round #629 (Div. 3)
第一次AK写篇题解庆祝一下~~文章目录A.Divisibility ProblemB. K-th Beautiful StringC. Ternary XORD. CarouselE. Tree QueriesF. Make k EqualA.Divisibility Problem看代码吧#include<bits/stdc++.h>#define pb push_bac...原创 2020-03-27 10:31:02 · 147 阅读 · 0 评论 -
Codeforces Round #625 World of Darkraft: Battle for Azathoth
链接Answer :可以把怪兽看成二维坐标上的一些点,每个点有一些权值。然后对于所有的x=ai(攻击)的轴上都有m个bi(防御)那么对于每一个bi它所能打死的所有怪兽就是当前的轴的左面所有y小于bi的怪兽所以问题就转化为一个区间求和+区间最大值的问题 用线段树维护就好了坑点:把握好题目给的条件,以及输入顺序(怪兽是先给的防御力 …好坑)Code:#include<bits/st...原创 2020-03-18 13:29:31 · 139 阅读 · 0 评论 -
Codeforces Round #626 Instant Noodles
l链接Answer :本题突破口在于gcd(a,b)=gcd(a,a+b)\gcd(a,b) = \gcd(a,a+b)gcd(a,b)=gcd(a,a+b)然后将右部点选择性合并后 直接求gcd(c1-ck)即可坑点:遍历mp的时候注意 略过空集Code:#include<bits/stdc++.h>using namespace std;typedef lo...原创 2020-03-17 23:11:36 · 297 阅读 · 0 评论 -
Codeforces Round #532 (Div. 2) E. Andrew and Taxi 二分+拓扑序
Andrew and Taxi Question:给一n个节点m条边的有向有权图 现可以改变其中一些边的方向 总代价是这些边的最大值,问使该图无环的最小花费 n,m<1e5Solution:由于代价为所有边的最大值,想到二分然后对所有大于mid的边进行拓扑排序后,如果没有环那mid这个值就是可行的。并且把不在图中的边(即权值小于mid)并且top【u】>top【v】的边翻...原创 2020-02-21 18:31:35 · 97 阅读 · 0 评论 -
Codeforces Round #619 (Div. 2) E. Nanosoft 前缀和
E. Nanosoft Question:定义一个logo 形状颜色如下类推 ,现在有一个关于logo的颜色矩阵长n宽m 并有q次询问:r1,c1 r2,c2 直接最大的logo有多大n,m<=500 q<=1000;Solution:记录每种颜色数量的二维前缀和 ,那么对于一个区域 是否为logo只需分别判断其中颜色数量即可,并且以某个点为起点的logo最多只有一个 ...原创 2020-02-17 15:20:07 · 161 阅读 · 0 评论 -
Codeforces Round #556 (Div. 1) B - Three Religions DP
B - Three Religions DPQuestion:现有一个主串S 和 三个空串 A,B,C(只含小写字母)。问每次操作后 S 是否能包含 A B C (在保证 A B C 串内字母顺序不变的情况下组成S的一个子序列)操作是在某个串后面添加或删除字母一共q次操作|A| ,|B| ,|C| <= 250 。|S| <= 100000 。 q<1000我们要及...原创 2020-02-17 10:24:15 · 110 阅读 · 0 评论 -
Codeforces Round #618 E. Water Balance 贪心
Water Balance题意:n个数 可进行以下操作任意次:选择区间【l,r】其中的A【i】都变成这个区间的平均数,要求最小字典序思路:由于最后答案使单调不减的那假设前i个元素答案以求出,看当前位置的元素能否对当前答案优化,即前面元素的个区间答案 加 上当前元素能否使区间均值变小,一直维护一个答案序列就可以了教训...原创 2020-02-10 19:31:25 · 173 阅读 · 0 评论 -
Educational Codeforces Round 80 (Rated for Div. 2)ADE
D. Minimax Problem](https://codeforces.com/contest/1288/problem/D)二分答案,由于m<=8,所以可以把每行对于一个mid的状态存储下来,然后枚举所有状态即可利用二进制存储信息的思想,并分析题目的特点 ,可以很清晰的想到解法A. Deadlinen,d<1e9求方程 x+ceil(d/(x+1))<=n是否...原创 2020-01-15 22:27:14 · 104 阅读 · 0 评论