cf
pubgoso
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #677 (Div. 3) A-G
比赛链接A.把数存下来然后算一下#pragma GCC optimize(2)#pragma GCC optimize(3)#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second#define pb push_back#define wzh(x) cerr<<#x<<原创 2020-10-21 19:40:56 · 446 阅读 · 0 评论 -
2019-2020 ICPC Southwestern European Regional Programming Contest (SWERC 2019-20)部分题解
比赛链接躺狗实锤,只会两题G.Swapping Places大意:给你一个长度为nnn的字符串序列,字符串种类为sss,给你lll组关系。每组关系由两个字符串a,ba,ba,b构成,若a,ba,ba,b相邻,则可以交换这两个字符串。问你这个字符串序列的最终能 变成的字典序最小的序列是什么。思路:字符串不好看,所以先离散化成数组再搞。一个比较明显的思路是 由于种类数最多200,所以可以考虑枚举每一位最小能放的字符串是什么就行。然后考虑具体实现。我们考虑在枚举到第i位的时候,放第j小的字符串是否合原创 2020-06-13 20:23:35 · 1349 阅读 · 0 评论 -
Codeforces Round #645 (Div. 2) E. Are You Fired?
题目链接思路:首先一个前置结论:如果有答案,则必然有一个≥n+12\geq \frac{n+1}{2}≥2n+1的答案。因为,如果有个答案k,那么2k也是满足的,不断倍增即可得此结论。那么对于[n+12,n][ \frac{n+1}{2},n][2n+1,n]的每个数,我们怎么check合法性呢?设当前check的值为k:显然对于任意一个1≤i≤n−k+11 \leq i\leq n-k+11≤i≤n−k+1,都有∑j=ij+k−1aj>0\sum_{j=i}^{j+k-1} a_j原创 2020-05-27 15:19:24 · 167 阅读 · 0 评论 -
ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)部分题解
题目链接A.枚举位数,然后判断一下即可。。。。ps:好像并不需要二分。。。不过问题不大#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second#define pb push_back#define mp make_pairint t;LL n,x;int get(LL y){ int原创 2020-05-26 21:26:15 · 590 阅读 · 0 评论 -
Educational Codeforces Round 87 (Rated for Div. 2) E. Graph Coloring 并查集
题目链接题意:给你一个图,你要给每个点染色(1,2,3),满足相邻点奇偶不同,且颜色数量给定。思路:显然这张图的所有连通块必然都是二分图,否则存在奇环的话就必然不合法。那么先用并查集处理出所有连通块的两侧大小,用记录路径的dp处理出染2的方案就做完了。并查集判断二分图的一些细节见:此处#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define f原创 2020-05-20 15:18:51 · 136 阅读 · 0 评论 -
2019 USP Try-outs
题目链接A.Kolkhozy大意:询问区间中%m=x的数的个数思路:离线+分块询问区间[l,r][l,r][l,r]等价于[1,r]−[1,l−1][1,r]-[1,l-1][1,r]−[1,l−1]那么可以将询问拆成两部分,按照坐标递增排序。枚举每个询问,按照m与n\sqrt nn的关系进行分类,m>nm>\sqrt nm>n的时候显然不会有超过n\sqrt nn个数满足,那么直接枚举即可。m≤nm\leq \sqrt nm≤n的时候可以用 f[m][x]f[m][x原创 2020-05-20 14:20:24 · 477 阅读 · 0 评论 -
2019 ICPC Malaysia National 部分题解
比赛链接C.题意题,读懂之后枚举即可#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second#define pb push_back#define mp make_pairint t,n,s,cnt;int main() { for(scanf("%d",&t);t;t--){原创 2020-05-17 13:46:45 · 350 阅读 · 0 评论 -
Codeforces Round #642 (Div. 3) A-F题解
比赛地址A.Most Unstable Array思路:显然 0 m 0 这样放是最大的#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second#define pb push_back#define mp make_pairint t,n,m;int main() { ios::syn原创 2020-05-15 12:57:40 · 226 阅读 · 0 评论 -
Codeforces Round #634 (Div. 3)
比赛链接有疑问欢迎评论区指正E2. Three Blocks Palindrome (hard version)思路:由于权值最大是200,所以我们可以枚举每种权值作为x的时候的情况。每种情况都枚举中间的y值即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = ...原创 2020-04-14 19:33:22 · 202 阅读 · 0 评论 -
1326E - Bombs
题目链接思路:显然答案是单调不增的。根据这个性质,我们可以枚举答案来检查答案是否合法。假设第i−1i-1i−1次的答案为 ansi−1ans_{i-1}ansi−1,此时我们在qiq_iqi位置新加入了一个炸弹,那么当前存在炸弹的位置就是q1,q2.....qiq_1,q_2.....q_iq1,q2.....qi。如果存在一个位置yyy,使得[y,n][y,n][y,n]上≥x...原创 2020-03-22 15:31:44 · 513 阅读 · 0 评论 -
Codeforces Round #628 (Div. 2) E. Ehab's REAL Number Theory Problem
思路:因为不超过7个因数,所有至多有2个不同的质因子。我们先把一些特殊的情况处理掉:1.输入包含完全平方数2.存在两个数相乘是完全平方数那么剩下的情况 答案必然是>=3预处理出所有数的:幂次为奇数的质因子,如果仅有一个的话,就给这个质因子打个标记,否则将两个质因子连一个无向边。那么如果存在解的话,必然分成两种情况:一条路径且两端的点被打了标记;一个环。由于输入数的大小在1e6级...原创 2020-03-17 17:00:41 · 250 阅读 · 0 评论 -
Codeforces Round #313 (Div. 2) A-E
题目链接A.脑筋急转弯#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second#define pb push_backint n,a[N];int main() { ios::s...原创 2020-03-11 17:58:20 · 114 阅读 · 0 评论 -
CodeCraft-20 (Div. 2) E.Team Building
题目链接大意:n个人,选k个观众,p个球员,每个人当听众的能力为aia_iai,在每个位置的能力为si,js_{i,j}si,j,让你选择p+kp+kp+k个人使得能力和最大。思路:考虑状压dpdpdp,f[i][j]f[i][j]f[i][j]表示到第iii个人时的第jjj个状态的最大能力。转移时考虑两个地方:1.前i−1i-1i−1个人是否选满了kkk个观众2.在jjj状态下还有...原创 2020-03-05 14:42:10 · 2699 阅读 · 0 评论 -
Codeforces Round #624 (Div. 3) A-F
比赛链接A.分情况讨论一下即可#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second#define pb push_backint t,a,b;int main() { ios...原创 2020-02-25 11:57:36 · 263 阅读 · 0 评论 -
Codeforces Round #621 (Div. 1 + Div. 2) D. Cow and Fields
题目链接大意:给你一个无向图,k个特殊点,你要在两个不同的特殊点直接连一条无向边,使得1−>n1->n1−>n的最短路最长。思路:直观的想法肯定是枚举所有情况来找到最小值,显然复杂度不允许。我们思考一下:不连边的最短路是lenlenlen,当前两个特殊点分别是s,ts,ts,t,那么这种情况下的最短路就是min(len,min(p[s]+q[t]+1,p[t]+q[s]+...原创 2020-02-18 12:55:39 · 473 阅读 · 0 评论 -
Codeforces Round #620 (Div. 2) F2. Animal Observation (hard version)
题目链接题目大意:给你一个n∗mn*mn∗m的矩阵,你可以在每行放置一个2∗k2*k2∗k的矩形框,问你被矩形框 ,框中的数的和最大值是多少。每个数只计算一次。思路:用dp[i][j]dp[i][j]dp[i][j],表示第iii个矩形框放在第jjj列的时候的最大值。暴力的转移是很显然的:枚举上一次的所有情况即可。优化的话可以用线段树优化成logloglog的转移复杂度。具体实现是:当前...原创 2020-02-17 18:13:55 · 431 阅读 · 3 评论 -
Codeforces Round #619 (Div. 2) E. Nanosoft
题目链接题意:给你一个n∗m,n,m≤500n*m,n,m\leq500n∗m,n,m≤500的有矩阵,问你每个子矩形中最大满足条件的正方形面积。思路:显然答案最大不超过250,那我们枚举答案即可。设当前答案为LLL.,用二维数组记录sss可行与否。我们检查每个左端点的是否可以构成这个边长LLL.,如果可以的话,这个左端点的值就是1,然后遍历所有询问看询问的二维区间是否有值是1即可。#in...原创 2020-02-17 15:24:17 · 315 阅读 · 0 评论 -
Educational Codeforces Round 82 (Rated for Div. 2)E. Erase Subsequences
题目链接题意:给你两个字符串s,ts,ts,t,问你ttt是否可以由sss的两个不相交子序列构成。思路:显然我们应该枚举ttt的断点iii,使得[1,i][1,i][1,i]为一个子序列[i+1,lent][i+1,len_t][i+1,lent]为第二个子序列。然后check这种情况是否合法.我们设前一半为LLL,后一半为RRRdp[i][j]dp[i][j]dp[i][j]表示当前匹配...原创 2020-02-17 12:36:03 · 1547 阅读 · 2 评论 -
Educational Codeforces Round 82 (Rated for Div. 2) D. Fill The Bag
题目链接大意:给你一些2的幂次数,问你最少分解几次可以用一些2的幂次数得到n。分解指的是:2x−>2∗2x−1,x≥02^x->2*2^{x-1},x\geq02x−>2∗2x−1,x≥0思路:把n按二进制拆分,从小到大枚举每一位1:先看低位能不能凑齐,否则从高位拆。细节见代码:(写的比较复杂,理解是很好理解的)#include <bits/stdc++.h>...原创 2020-02-17 12:20:28 · 267 阅读 · 0 评论 -
Educational Codeforces Round 82 (Rated for Div. 2) C. Perfect Keyboard
题目链接题意:给你一个字符串,让你构造一个26字母的排列,使得给定字符串中若相邻的字符在排列中也相邻。不存在输出NO.思路:首先一个显然的不可能构造出来的情况是,有个字母跟>2个不同字母相邻。然后再看能不能构造出可行解。一个暴力点的做法就是枚举排列的第一个字符然后依次构造,构造完成再check一下合法性即可.因为可行解一定可以由这种方式构造出来:第一个字符显然只能和一个不同的字符相...原创 2020-02-17 11:51:44 · 101 阅读 · 0 评论 -
Codeforces Round #617 (Div. 3) F. Berland Beauty
题目链接题意:给你一颗树和一些限制,让你构造每个边的边权满足 限制。限制:a−>ba->ba−>b的最短路径上的最小边权等于ccc.思路:把所有限制按照c从大到小排序,然后依次遍历所有限制,对每条路径上没有赋值的赋值成当前的c。如果都有值且值都大于c,那显然无解。细节见代码:#include <bits/stdc++.h>using namespace s...原创 2020-02-17 11:38:12 · 178 阅读 · 0 评论 -
Codeforces Round #335 (Div. 2) (A-E)
比赛链接A - Magic Spheres把多余的都拿出来看能不能生成需要的那么多即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second#define pb push_back...原创 2020-01-07 17:01:40 · 146 阅读 · 0 评论 -
Codeforces Round #274 (Div. 2) (A-E)
比赛链接A - Expression给你三个数,让你插入一些+,−+,-+,−和小括号,使得值最大直接输出所有情况的最大值即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first#define se second...原创 2020-01-07 16:25:05 · 154 阅读 · 0 评论 -
Codeforces Round #612 (Div. 1)(A-C)
比赛链接A - Garland大意:给你一个可能没补完的排列,让你把剩下的数填上,使得奇偶不同的相邻数目最少。思路:直接上dpdpdp,表示第iii个,有jjj个111,kkk个000,第iii个是0/10/10/1的最小答案。枚举1−n1-n1−n分情况转移即可。#include <bits/stdc++.h>using namespace std;typedef lo...原创 2020-01-07 16:02:47 · 258 阅读 · 0 评论 -
Hello 2020 D. New Year and Conference
题目链接大意:给你nnn个事件,每个时间在a,ba,ba,b地点的开始结束时间。问你有没有一个事件子集,使得,在一个地点不冲突,但是另一个地点冲突。(冲突的意思是:时间相交/重合)思路:显然,问题简化为,存不存在任意两个事件,使得,两个地点有且只有一个地点使得两个事件时间相交。那么问题就好解决了:al,ar,bl,bral,ar,bl,bral,ar,bl,br,代表每个事件的a,ba,ba...原创 2020-01-05 16:42:59 · 404 阅读 · 0 评论 -
Educational Codeforces Round 25 G. Tree Queries
题目链接大意:给你一颗树和一些操作(初始所有节点都是白色)1:把vvv点染成黑色2:找到一个最小节点编号yyy,使得xxx到某个黑色节点到最短路径上存在节点yyy.思路:我们把第一个变成黑色节点到点 设为根节点,然后求出根节点到所有点的路径上到最小节点编号,设为数组fff,那么如果没有其他黑点的话,那么f[x]f[x]f[x]就是询问点xxx的答案了。如果存在别的黑点xxx,那么显然xxx...原创 2020-01-03 16:22:22 · 104 阅读 · 0 评论 -
Codeforces Round #611 (Div. 3) F. DIY Garland
题目链接大意:给你一个序列,让你构造一颗合法的有根树,满足:序列的第ithi_{th}ith数代表的是第ithi_{th}ith大的边的父亲节点,边的价值定义为:子树内所有节点编号的2的幂次方和。思路:直接逆向拓扑排序,开一个优先队列,把入度为0的先进队,倒着扫,把最小的和当前点连边即可。细节见代码:#include <bits/stdc++.h>using names...原创 2020-01-01 16:08:15 · 300 阅读 · 0 评论 -
Codeforces Round #561 (Div. 2) D. Cute Sequences(数学+贪心)
题目链接题目大意:思路:构造一个这样的序列。特判一下答案长度在1,2的情况。我们假设有解,且长度为kkk,那么显然我们可以得到一个等式:1.设bbb数组为每次加的值,b1=0b_1=0b1=02.∑i=1k−12k−i−1∗bi+bn+A∗2k−2=B\sum_{i=1}^{k-1}2^{k-i-1}*b_i+b_n+A*2^{k-2}=B∑i=1k−12k−i−1∗bi+bn...原创 2019-12-27 16:44:19 · 217 阅读 · 0 评论 -
Codeforces Round #610 (Div. 2) E. The Cake Is a Lie
题目链接大意:给你一个n变形,一个长度n的排列,依次写在n个点上,每次割掉连续三个点组成的三角形。给你n-2次切割的三角形的三个顶点标号,求出这个排列,和切割顺序。思路:显然n-2个三角形的所有边必然包含 长度n的排列的相邻点(首尾相连)连边所构成的边集,且每条边必然只能出现一次。那么输入的时候把三角形所有的边的出现次数都统计一下,出现一次的即为我们需要找的边(长度n的排列的相邻点(首尾...原创 2019-12-27 00:56:25 · 278 阅读 · 0 评论 -
2019-2020 ICPC, NERC, Southern and Volga Russian Regional Contest J. The Parade(二分+贪心)
题目链接大意:给你一个组士兵,告诉你身高iii的人数aia_iai,让你放在kkk行,使得每行人数相同且每行中士兵身高差不超过111,问你最多能放多少士兵满足条件。思路:二分每行人数。证明:如果xxx满足的话,显然可以把每行都去掉相同的人数使得[1,x][1,x][1,x]都满足。遍历nnn个人,先把上一个身高的士兵没用完的看能不能和当前身高的放满一行,再放当前身高的。如果最后放的行数比...原创 2019-12-19 20:20:47 · 253 阅读 · 0 评论 -
2019-2020 ICPC, NERC, Northern Eurasia Finals J. Just Arrange the Icons(贪心+数学)
题目链接大意:给你一个序列,表示所有物品的种类,让你用最少的箱子装下所有物品,大小任意但需满足:箱子中必须只能装一种数,且必须装满活着差一个装满。 物品的大小都为1。思路:显然,我们要枚举一些大小来获得答案,那么我们用一个集合和储存合法答案,然后check所有的答案来获得一个符合所有物品的箱子大小。初始的集合显然要从出现最少的种类获得。主要的地方就是check是否合法了。//p[1] ...原创 2019-12-19 15:43:13 · 535 阅读 · 0 评论 -
Codeforces Round #601 (Div. 1) A. Feeding Chicken(贪心+构造)
题目链接大意:给你一个矩形,让你把矩形分成k个联通块,联通块内的R数的最大最小值相差最小,输出构造方案。思路:蛇形填数的方式填即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e2 + 10;#define fi first#define se seco...原创 2019-12-19 15:22:34 · 171 阅读 · 0 评论 -
Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum(思维+差分)
题目链接大意:给你一个序列,给出询问l,r区间,让你写输出现偶数次的数的异或和思路:显然区间直接的异或和是出现奇数次的数的异或和,那我们要求的是偶数次的,显然我们只需一步,把区间所有出现过的数再异或起来,两个的异或和就是答案了,因为这样做,出现奇数次的数就会被去掉剩下的就是偶数次的数了。。。。那么问题就转化为区间只出现过一次的数的异或和。先把序列离散话一下。考虑按r从小到大离线查询。。。...原创 2019-11-06 16:56:12 · 137 阅读 · 0 评论 -
Educational Codeforces Round 15 E Analysis of Pathes in Functional Graph(倍增)
题目链接大意:给你一个有向图,每个点有且只有一个出边。问你从所有点出发长经过k个点路径长度和,和最小边权。倍增处理每个点出发跳2x2^x2x点的路径上的信息即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;#define fi first...原创 2019-11-06 11:45:41 · 146 阅读 · 0 评论 -
Codeforces Round #364 (Div. 2) D. As Fast As Possible(binary search)
题目链接大意:n个人,要走l长的路,有辆车可以带k个人。人带速度v1v_1v1,车的速度v2v_2v2让你求出最短通过时间显然时间是具有单调性的,我们二分答案来check。每次用车装k个人往后走(check的值的剩余时间)一个最长的距离x1x_1x1,x1x_1x1表示车能走的最大距离,x2x_2x2人还要走的距离,tottottot已经花的时间x1v2+x2v1=mid−t...原创 2019-11-05 18:42:54 · 131 阅读 · 0 评论 -
Codeforces Round #363 (Div. 2) D. Fix a Tree(greedy+dsu)
题目链接大意:给你一个序列,让你改动最少的元素使得可以构成一个有根树。a1,a2.....ana_1,a_2.....a_na1,a2.....an表示iii节点的父亲节点,有且只有一个节点i=aii=a_ii=ai.输出改动次数和改动后的序列。思路:如果开始构不成树的话,必然存在环,同时也可能是有多个联通块,我们要做的就是把环去掉,把所有的联通块连在一起。我们由于要保证改动次数...原创 2019-11-05 13:43:22 · 109 阅读 · 0 评论 -
CF1181D Irrigation Intersection of Permutations
题目链接题意:给你两个长度为n,m的排列a,b,然后让你支持两个操作:1.询问a排列上[l1,r1]区间和b排列上[l2,r2]区间相同元素的个数。2.交换b排列上c,d位置的元素思路 :我们可以建立一个长度m的数组c,其中第iii个元素表示b[i]在a中的位置,那么显然答案就是c数组[l2,r2]中值在[l1,r1]的个数了。直接上树状数组套主席树即可在线解决这个问题,注意要回收空间。...原创 2019-09-26 19:21:15 · 165 阅读 · 0 评论 -
Codeforces Round #589 (Div. 2) E.Another Filling the Grid
题目链接大意:给你一个n*n的矩阵和k,让你往每个单元格填1-k的数,使得每行每列的最小值都是1.问有多少种构造方法。思路:考虑dp[i][j]dp[i][j]dp[i][j]意为,已经满足i行最小值都是1,但是有j列的最小值不是1的方案。初始dp[0][n]=1dp[0][n]=1dp[0][n]=1然后每次转移的话就是dp[i][j]dp[i][j]dp[i][j]显然是从dp[i−1...原创 2019-10-01 15:46:42 · 366 阅读 · 0 评论 -
Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field 数学
题目链接题意:给你三个数n,m,k;让你构造出一个nm的矩阵,矩阵元素只有两个值(1,-1),且满足每行每列的乘积为k,问你多少个矩阵。解法:首先,如果n,m奇偶不同,且k=-1时,必然无解:设n为奇数,m为偶数,且首先要满足每行乘积为-1,那么每行必然有奇数个-1,那么必然会存在有偶数个-1.。满足每列乘积为-1,那么每列必然有奇数个-1,那么必然存在奇数个-1.互相矛盾。剩下的就是有解...原创 2019-03-12 21:03:51 · 136 阅读 · 0 评论 -
Codeforces Round #570 (Div. 3)A-H题解
比赛链接A.Nearest Interesting Number题目大意:给你一个数nnn,让你找一个最小的xxx,满足n≤xn\leq xn≤x,且xxx的数位和是4的倍数。直接暴力跑一下就行了。#include<bits/stdc++.h>#define LL long long#define fi first#define se second#define mp ...原创 2019-06-28 15:08:11 · 171 阅读 · 0 评论