CF
JayGram
这个作者很懒,什么都没留下…
展开
-
Educational Codeforces Round 134 (Rated for Div. 2) E. Prefix Function Queries(KMP优化)
KMP优化原创 2022-08-30 16:44:06 · 270 阅读 · 1 评论 -
CF:1214D.Treasure Island(有向图必经点)
有向图必经点原创 2022-06-28 22:00:45 · 339 阅读 · 0 评论 -
CF:1667B. Optimal Partition(dp好题:线段树优化dp)
题目链接题面:题面:题面:题意:题意:题意:给定一个长度为n的数组,将其分成若干个连续的子数组。求每个子数组的价值之和的最大值。每个子数组的价值:对于s(l,r)=al+al+1+...+ars(l,r)=a_l+a_{l+1}+...+a_rs(l,r)=al+al+1+...+ar若s(l,r)>0,则价值为r−l+1若s(l,r)>0,则价值为r-l+1若s(l,r)>0,则价值为r−l+1若s(l,r)=0,则价值为0若s(l,r)=0,则价值为0若s(l,r原创 2022-05-21 18:36:04 · 421 阅读 · 0 评论 -
CF:E. Bored Bakry
题目链接题面题面题面题意题意题意给定一个长度为n的序列,找出最长的区间满足:al&al+1&...&ar>al⊕al+1⊕....⊕ara_l\&a_{l+1}\&...\&a_r>a_l\oplus a_{l+1}\oplus....\oplus a_ral&al+1&...&ar>al⊕al+1⊕....⊕ar题解该题解充分利用了异或的性质,比较好。#include <bits/s转载 2022-05-20 12:02:19 · 138 阅读 · 0 评论 -
CF:D. Toss a Coin to Your Graph...(二分+拓扑判环)
题目链接题意:题意:题意:给定一个有向图。nnn个点,mmm条有向边,和一个限制的kkk。第二行输入nnn个数字,代表每个点的点权a[i]a[i]a[i]。找出一条长度为kkk的路径,使得所有经过点的点权的最大值最小。题解:题解:题解:二分答案,记为mid。然后对于点权大于mid的点不去遍历。只遍历点权小于等于mid的点。并判断这个图是否存在链长大于等k的链,或者是存在环。如何只遍历小于等于mid的点呢:记录每条边,对于每次的mid,去建一个新的图。然后在这个图中跑。判环:用拓扑排序来判环。当从原创 2022-05-15 15:07:33 · 458 阅读 · 0 评论 -
CF:1445 D. Divide and Sum(思维+组合数学)
题意:的给个2*n长度的数组,将其划分为两个长度为n的数组分别给p和q,要求满足p为不上升序列,q为不下降序列。定义一个函数f(p,q)=∑i=1n∣xi−yi∣f(p,q)=\sum_{i=1}^{n}|x_i-y_i|f(p,q)=∑i=1n∣xi−yi∣;计算所有fff的和,并对998244353 去模。**题解:是个结论题。所2n的数进行排序,得到一个新的序列,记为数组a。可以发现按照上面的顺序随意取n个数给p,然后剩下的数全给q,就构造出了这样的序列。然后就是求f的问题。这里原创 2022-05-09 11:50:15 · 374 阅读 · 0 评论 -
CF1446:Xor Tree(字典树好题)
题目链接#include <bits/stdc++.h>using namespace std;const int maxn=2e5+5;int a[maxn];int n,idx;int son[maxn*35][2];int f[maxn*35];void insert(int x){ int p=0; for(int i=31;i>=0;i--){ int t=(x>>i)&1; if(!s.原创 2022-05-08 22:13:01 · 208 阅读 · 0 评论 -
Codeforces Round #787 (Div. 3)E~G
E.并查集题意:给定字符串a,对a可以执行一下操作:选择一个在字符串中出现的字符,将所有出现在该字符串中的该字符向前翻转。例如:‘c’替换成’b’,‘a’替换成’z’给定一个最大操作数k。在操作次数不超过k的情况下把a的字典序变得最小。题解:从前往后遍历,对将字符i尽可能的减小,将每个字符最后变成的最终态用并查集进行维护。本人未使用并查集的模板,但用type数组维护的方式和并查集类似。#include <bits/stdc++.h>using namespace std;co原创 2022-05-06 11:31:51 · 599 阅读 · 0 评论 -
CF:1674 G. Remove Directed Edges
题目链接题意:给出有向无环图,删去若干条边,使得满足以下两个条件:(1)对于每一个结点,其出边比原来少,除非初始出边就为0;(2)对于每一个结点,其入边比原来少,除非初始入边就为0;操作后,选择一个点集S,S中的任意两个元素u,v都满足:u能到v或者v能到u。请得到最大的|S|题解:由于是个有向无环图。所以S中的点一定是从u能到v,而v到不了u。那么S集合一定是一条链上的所有点;发现了这个问题后就好写了,可以发现用dp做。状态表示:f[u]表示操作后以u为起点的最长链原创 2022-05-03 13:25:58 · 473 阅读 · 0 评论 -
CF:1626C. Monsters And Spells
题目链接题解:从后往前枚举,每个点所跨越的维度为p=k[i]-h[i]+1,即p为i点至少的起点。记录每个点的起点后。从n-1点往前遍历;假如遍历到i点,判断i+1的起点是否覆盖了k[i],若覆盖了,则i和i+1的起点为两者起点的最小值,后面同理。所以相当于维护一些连通块。用并查集维护。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn=105;int n;原创 2022-05-02 21:15:06 · 186 阅读 · 0 评论 -
CF:1632C. Strange Test(思维)
题目链接两种情况:1.a一直加,加到一定程度与b或等于b2.b一直加,加到一定程度与a或等于b加的最长情况为两数之差。#include <bits/stdc++.h>using namespace std;int a,b;void solve(){ cin>>a>>b; int ans=b-a; for(int i=a;i<b;i++){ if((i|b)==b){ ans原创 2022-05-02 19:44:50 · 407 阅读 · 1 评论 -
CF:1633D. Make Them Equal(广搜+背包)
题目链接题意:有一个大小为n的整数数组a。最初,数组所有元素都为1.可以执行如下操作:选定一个i和任意的x(x>0)然后把ai=ai+[ai/x](向下取整)执行所有操作后,若ai==bi,那么你可以得到ci个金币。通过执行不超过k次的操作使得获得最大的金币数量。1->bi的最小操作数,用广搜得到。所以用广搜预处理1->1000的所有最小操作数,然后来一遍01背包即可。细节处理:由于k太大了,但是可以发现任意一个1->bi的操作数最多为20左右,所以最多操作数原创 2022-05-02 18:29:54 · 294 阅读 · 0 评论 -
CF:1659 Line Empire(思维+贪心)
题目链接由于国王的首都搬迁的过程,一定不会往回搬迁。所以枚举所有的搬迁的位置pos。然后0~pos是征服一个,搬迁一个,pos~n是只有征服。以此算出最小值。#include <bits/stdc++.h>using namespace std;const int maxn=2e5+5;typedef long long LL;int n,a,b;LL w[maxn],s[maxn];LL get_num(int i){ return w[i]*(a+b)+(s原创 2022-05-02 17:21:24 · 257 阅读 · 0 评论 -
CF533B Work Group(树形DP、)
题目链接状态表示:f[u][0/1],以u为根节点,有人数偶数(0表示)或奇数个(1表示)的最大权值这道题其实是状态只有两种的树上背包。但是第一次做这个题的时候。真的不会想到用树上背包来做,因为他又一个下属必须是偶数的限制条件在那里。就会感觉不能用背包。但没想到用初始化f[u][1]=负无穷,来防止了这种情况。这点就是这道题的精妙之处。通常状态下会将f[u][1]=a[u]初始化为该点的权值,f[u][0]=0初始化为空(即0);但是这样的话,之后转移的时候f[u][0]会从f[原创 2022-04-29 11:01:51 · 217 阅读 · 0 评论 -
CF855C Helga Hufflepuff‘s Cup(树形dp:用辅助数组来完成状态转移方程)
题目链接该题的状态表示挺好想的。就是f[i][j[k]表示以i为根的子树有k个最高值。其中j有三个状态:j=0时,表示i点的值为小于最高值j=1时,表示i点的值为等于最高值j=2时,表示i点的值为大于最高值初始状态下f[i][0][0]=k-1;f[i][1][1]=1;f[i][2][0]=m-k;(m表示有多少种颜色)但是在写状态转移的时候发现若正常的状态转移要有一些限制条件。比如:在u从v中转移过来是f[u][0][j]+=f[u][0][j-k]*(f[u][0.原创 2022-04-25 12:01:40 · 238 阅读 · 0 评论 -
CF82D Two out of Three(状态转移方程难表示)
题目链接洛谷:CF82D Two out of Three状态转移方程有点难想。看了题解才知道的。题解链接#include <bits/stdc++.h>using namespace std;typedef pair<int,int>PII;const int maxn=1050;int n;int a[maxn];int f[maxn][maxn];struct Node{ int d,v,x,y;};Node path[maxn][.原创 2022-04-25 09:47:00 · 192 阅读 · 0 评论 -
CF Global Round 20:F1. Array Shuffling(最少交换顺序)
题目链接:F1. Array Shuffling题面:input222 141 2 3 3output1 23 3 2 1题意:给定长度为n的数组a,求一个数组b。可以对b进行交换的操作变成a,记对数组b通过交换变成a的最小操作次数为x。要求构造一个数组b,使得b变为a的最小操作次数最大。此处有一个结论:排序算法-最少交换次数证明_玉曦的博客-CSDN博客_交换次数最少的排序算法结论就是:如果想要把a[i]->b[j],我们就建立一个条件i-&.原创 2022-04-24 13:46:59 · 2077 阅读 · 0 评论