算法练习
文章平均质量分 71
Herod_
这个作者很懒,什么都没留下…
展开
-
Codeforces 1272F. Two Bracket Sequences(BFS+DP+路径记忆)
Codeforces Round #605 (Div. 3) 题解全文见: https://blog.csdn.net/qq_43461168/article/details/114377042F. Two Bracket Sequences题意:给出两个括号串,求一个最短的括号串,使得这两个串都是他的子序列。思路:参考官方题解。BFS+DP。用dp[i][j][d]表示包含s1的前i个,s2的前j个,且度为d的情况下的最小长度。 度定义为 左括号的数量-右括号的数量。转移呢,肯定是从 dp[0][0原创 2021-03-04 21:56:28 · 211 阅读 · 1 评论 -
Codeforces Round #605 (Div. 3)
A. Three Friends题意:给三个点,每个点至多往左边或者右边移动一次,可以不移动。问最后两两距离之和的最小值。思路:直接枚举每个点往左,不动和往右的情况。计算答案。AC代码:#include <iostream>#include <bits/stdc++.h>#include <unordered_map>//#define int long long#define mk make_pair#define gcd __gcdusing na原创 2021-03-04 21:53:32 · 191 阅读 · 1 评论 -
Codeforces Round #704 (Div. 2)(E待补)
A. Three swimmers题意:三个人走一个来回的时间分别是a,b,c。问当到达起点时间为t时,最少要等多久,会有人回到起点。思路:取模判断AC代码:#include <iostream>#include <bits/stdc++.h>#include <unordered_map>#define int long long#define mk make_pair#define gcd __gcdusing namespace std;con原创 2021-03-04 12:13:41 · 156 阅读 · 1 评论 -
Codeforces Round #702 (Div. 3)
A. Dense Array题意:一个数组,要求相邻两个数不能相差两倍以上。问需要填入多少个数,使得满足条件。思路:找到不满足的地方,然后每次填入min的两倍。直到满足。AC代码:#include <iostream>#include <bits/stdc++.h>#include <unordered_map>#define int long long#define mk make_pair#define gcd __gcdusing namespa原创 2021-02-17 23:17:08 · 184 阅读 · 0 评论 -
2013ACM-ICPC杭州赛区全国邀请赛(C待补)
传送门:http://acm.hdu.edu.cn/search.php?field=problem&key=2013ACM-ICPC%BA%BC%D6%DD%C8%FC%C7%F8%C8%AB%B9%FA%D1%FB%C7%EB%C8%FC&source=1&searchmode=sourceA. Robot题意:一个n个格子的圈,编号1-n。一个机器人初始在位置1。然后给出m条指令。每条指令,可以控制机器人移动x个位置。但是方向是任意的,可以顺时针可以逆时针。概率相同。问最后原创 2021-02-16 16:46:11 · 258 阅读 · 0 评论 -
Codeforces 1367F1. Flying Sort (Easy Version)(DP+离散化)
Codeforces Round #650 (Div. 3) 全文见:https://blog.csdn.net/qq_43461168/article/details/112760623F1. Flying Sort (Easy Version)题意:一个数组,一次操作可以选择一个数,放到数组开头,或者放到末尾。问最少多少次操作可以使得数组有序。Easy版中所有元素各不相同。且数组长度 < 3000。思路:考虑求不需要动的元素。先对a数组离散化,变成值域1-n的数组。然后不需要动的元素是差值为原创 2021-02-16 16:09:02 · 205 阅读 · 0 评论 -
Educational Codeforces Round 104 (Rated for Div. 2)
A. Arena题意:每个英雄如果挑战能力值更低的英雄,自己的能力值就会+1。问可能有多少个英雄可以达到无限大。思路:除了能力值最低的,都可以无限挑战最低的。AC代码:#include <iostream>#include <bits/stdc++.h>#include <unordered_map>//#define int long long#define mk make_pair#define gcd __gcdusing namespace s原创 2021-02-16 14:38:43 · 173 阅读 · 0 评论 -
2018 ICPC 南京 E. Eva and Euro coins(思维+栈)
2018 ICPC 南京 全文见:https://blog.csdn.net/qq_43461168/article/details/113447519E. Eva and Euro coins题意:给定一排硬币。也就是一个01串。要变成目标01串。限制是每次只能翻动连续的k个硬币。思路:这场榜是不是被带偏了。E题应该是前期题呀。简单思维+栈。观察一下就可以发现,对于连续的k个相同的硬币。如果存在的话。那目标串里面也必然存在连续相同的才行。 其次,更重要的是,这连续的k个相同的,可以直接删掉!为什么呢原创 2021-01-31 14:00:29 · 443 阅读 · 0 评论 -
2018 ICPC 南京 M. Mediocre String Problem(ExKMP + Manacher / ExKMP+回文树)
2018 ICPC 南京 全文见:https://blog.csdn.net/qq_43461168/article/details/112796538M. Mediocre String Problem题意:给定两个串s和t。三元组(i,j,k)表示 s[i-j] + t[0-k],有多少个三元组使得结果串是回文串。简单来说就是在s中找一个子串 ,与t的前缀连起来变成回文串。求方案数。!思路参考:https://www.cnblogs.com/luowentao/p/10332309.html思路原创 2021-01-30 22:21:43 · 418 阅读 · 0 评论 -
Codeforces 1447E. Xor Tree(字典树/贪心)
Codeforces Round #683 (Div. 2, by Meet IT) 全文见:https://blog.csdn.net/qq_43461168/article/details/113175011E. Xor Tree题意:一个数组。每个元素会和与自己异或值最小的数连一条无向边。想要最终形成的图是一颗树。 至少要删掉几个元素。思路:首先肯定不会形成环。为什么呢。因为一个值,只会和一个异或起来最小的值相连。要形成环。就说明至少要有一个元素。同时连向两个元素。这显然不符合条件。环中边原创 2021-01-30 11:43:25 · 481 阅读 · 0 评论 -
Educational Codeforces Round 103 (Rated for Div. 2)
还没系统测试。仅供参考。A. K-divisible Sum题意:给定n,k。让找一个n个元素的数组,数组和可以整除k。并且数组中元素的最大值 最小。思路:如果n == k。那显然是1。 如果n > k,分两种情况。n%k == 0。那么全是1,和就是k的倍数了。否则,必须要有一些2。去凑成余数。所以最大值是2。 接着考虑 n < k,至少要和加起来要等于一个k。(k+n-1)/n 就是答案。AC代码:#include <iostream>#include <bit原创 2021-01-30 01:28:47 · 229 阅读 · 0 评论 -
Codeforces 1478D. Nezzar and Board(贝祖定理)
Codeforces Round #698 (Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/113405897D. Nezzar and Board题意:给定一个数组。只有一种操作。选择两个数x,y。然后数组增加一个新数 2*x-y。问能不能通过这种操作合成出 k。思路参考:https://www.cnblogs.com/HotPants/p/14344386.html思路: 先变换一下操作。2*x-y = x+(x-y)原创 2021-01-29 22:13:34 · 412 阅读 · 0 评论 -
Codeforces Round #698 (Div. 2)
A. Nezzar and Colorful Balls题意:签到题。思路:求最大的相同值的数量。AC代码:#include <iostream>#include <bits/stdc++.h>#include <unordered_map>#define int long long#define mk make_pair#define gcd __gcdusing namespace std;const double eps = 1e-10;co原创 2021-01-29 22:12:11 · 242 阅读 · 0 评论 -
Codeforces 1451E. Bitwise Queries(位运算性质)
Codeforces Round #685 (Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/113175779E. Bitwise Queries题意:给定一个未知的数组。长度为n。值在[0,n-1]区间。可以进行询问,询问任意两个数的任意位运算的值。AND,OR,XOR。要求在n+2(easy)/n+1(hard)次操作只能给出原数组。思路参考:https://blog.csdn.net/qq_45458915/artic原创 2021-01-29 13:26:22 · 178 阅读 · 0 评论 -
Codeforces 1455E. Four Points(枚举/贪心/几何)
Educational Codeforces Round 99 (Rated for Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/113105113E. Four Points题意:给四个点。移动他们,使得形成一个正方形。 求最小移动步数。思路参考:https://www.cnblogs.com/qieqiemin/p/14069636.html思路: x和y可以分开考虑。 首先枚举每个点作为四个点的任意一个点。也就是枚原创 2021-01-29 11:05:41 · 242 阅读 · 0 评论 -
Codeforces 1438E. Yurii Can Do Everything(暴力)
Codeforces Round #682 (Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/112697574E. Yurii Can Do Everything题意:一个数组,然后要找出所以 Good 子串的数量,定义是子串中 左右端点的异或值 等于 子串中所有数的和。思路:sum(l+1,r−1) ≤ 2⋅max(al,ar),因为异或操作,不可能产生进位。然后设现在 al是最大值。扫描一遍右端点。数出符合条件的个数。原创 2021-01-29 10:08:28 · 160 阅读 · 0 评论 -
Codeforces 1417E. XOR Inverse(字典树/贪心)
Codeforces Round #673 (Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/112606806E. XOR Inverse题意:一个数组。要找到一个x。使得数组中每个数都异或x之后。数组中的逆序对数量最少。思路:这种一般就是贪心构造。应且又和异或有关。那肯定和字典树有关。就往这个方向去想。首先用字典树,可以求出数组中逆序对的数了。dp[i][j] 表示第i位上 如果为j。存在的逆序对数量。考虑第i位上的0和1原创 2021-01-29 09:35:44 · 190 阅读 · 0 评论 -
Codeforces 1467E. Distinctive Roots in a Tree(树上差分)
Codeforces Round #695 (Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/112598001E. Distinctive Roots in a Tree题意:输出符合条件的点的个数。条件:从这个点出发到任意一个点的路径中没有重复的值。思路参考:https://blog.csdn.net/forever_shi/article/details/112467674思路:反过来想。 题目要求符合条件的点的个数。原创 2021-01-28 21:38:05 · 172 阅读 · 0 评论 -
Codeforces 1370F. The Hidden Pair(二分/思维)
Codeforces Round #651 (Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/112577099F. The Hidden Pair题意:给定一个数。给定一个s和t,保证他们不一样。然后每次可以询问一个点集合。 会返回这个点集合中。dis(s,x)+dis(x,t)最小的点。也就是到他们的距离和最小。如果有多个,随机返回一个。并且告知dis(s,x)+dis(x,t) 这个值。问能否在 14(easy)/11(h原创 2021-01-28 18:12:53 · 126 阅读 · 0 评论 -
Codeforces Round #697 (Div. 3)
A. Odd Divisor题意:判断n有没有奇数因子思路:签到题。只有2的幂次没有奇数因子。所以一直除2就行了。AC代码:#include <iostream>#include <bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusing namespace std;const double eps = 1e-10;//const int mod = 1e9+7;原创 2021-01-27 18:02:59 · 128 阅读 · 0 评论 -
Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2)
A. Prison Break题意:越狱。n*m的地图中,每个点上有一个人,地图中有个洞。要所有人移动到洞的位置。一次只能移动到相邻位置。问最少要多长时间。思路:求最远的点到他的距离就行了。最远的肯定是四个角的点。AC代码:#include <bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusing namespace std;const double eps = 1e-10;c原创 2021-01-27 12:36:24 · 176 阅读 · 0 评论 -
Codeforces Round #685 (Div. 2)
A. Subtract or Divide题意:给定一个n。两种操作。除以一个因子(自己不算)或者自减1。求把n变成1。最少的操作次数。思路:先特判掉1,2,3。然后分奇偶讨论。如果是偶数。那么除以n/2 就变成 2 了。然后再减1。只需2步。对于奇数。就算有奇数的因子。除一次的话,肯定没有办法变成2。最多变成3。而3变成1需要2步。也就是最少3步。而把奇数变成偶数需要1步。再变成1需要两步。所以对于所有奇数采用这种方式就行了。AC代码:#include <bits/stdc++.h>原创 2021-01-26 11:30:55 · 237 阅读 · 0 评论 -
Codeforces Round #683 (Div. 2, by Meet IT)
A. Add Candies题意:一个数组a[i] = i。可以有1000以内的操作。第j次操作可以选择 一个i,然后除了a[i],其他全部加上 j。求操作序列。思路:每次除了选择的数,都会加上j。但是他们本身a[i] = i。那么操作n次。第i次就选择a[i]。这样等于其他数都加上他。而他自己不变。这样操作完,所有数都加上了另外 n-1 个数。所有的数都是 sum(1~n)。AC代码:#include <iostream>#include <bits/stdc++.h>原创 2021-01-26 10:59:51 · 131 阅读 · 0 评论 -
Codeforces Round #692 (Div. 2, based on Technocup 2021 Elimination Round 3)
A. In-game Chat题意: 给定一个字符串,如果末尾 的’)'字符 大于剩下的字符的个数。则 yes 反之 no思路:大水题。AC代码:#include <bits/stdc++.h>#define int long long#define eps 1e-9using namespace std; signed main(){ int t = 1; cin>>t; while(t--){ string s;原创 2021-01-25 11:53:51 · 304 阅读 · 0 评论 -
Educational Codeforces Round 99 (Rated for Div. 2)
A. Strange Functions题意:定义f()函数为把放进去的数倒置,并去掉前导零。g(x)=xf(f(x))g(x)=\frac{x}{f(f(x))}g(x)=f(f(x))x,给定n。在所有 1<= x <= n中,能使得g(x)取得几个不同的值。思路:f(x)套了两层,先倒置去掉了前导零,又倒置去掉了前导零。其实就是倒回来了。然后用x去除它。假设x后面没有0。那么g(x)就是1。如果有一个0,那就是10。以此类推。所以答案就是n的位数。想必找规律也能看出来。AC代码:原创 2021-01-25 11:20:00 · 173 阅读 · 0 评论 -
Educational Codeforces Round 98 (Rated for Div. 2)
A. Robot Program题意:机器人要从(0,0)走到(x,y),可以上下左右,或者停在原地。五种操作。 不能连续使用同一种操作。思路:先最快走到(min(x,y),min(x,y))的地方。然后 停走停走就行了。AC代码:#include <iostream>#include <bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusing namespace st原创 2021-01-25 10:40:02 · 104 阅读 · 0 评论 -
2021.01.24 Week1 训练小结
训练第二周。相比第一周。训练强度小了许多。主要花了很多时间补上周剩下的题目。而没有花太多时间去写新题。被老师叫去办公室干活花了一下午。回家花了一天。数模花了一下午和很多个晚上。打了两场模拟赛。第一场2018 南京站 打的还不错,题目质量也很高。知识点很广。解题方法也很多种。第二场的 2018 沈阳站 能写的知识点比较少,现场赛两题就有牌了。题目质量不高。现在回家了,要加强训练强度。毕竟还要分时间给数模。接下来要主攻知识点的专练。早上继续打Codeforces保持手感。本周刷题记录:2018 IC原创 2021-01-24 23:01:18 · 174 阅读 · 0 评论 -
Codeforces1474D. Cleaning(前缀和/思维)
D. Cleaning题意:一个数组。每次可以选择两个相邻的数,同时减小1。而且允许交换两个数,最多操作一次。问是否能最后全变成0。思路:前后缀和。第一个数,肯定是和第二个数一起减。并且减到0的。同理第二个数还要和第三个数一起减。那么从左往右这样可以一直减下去。就变成了一个,a1,a2-a1,a3-a2+a1…这样的数组。存起来作为前缀和pre[],如果pre[n] == 0 则说明,减到最后大家都是0了。已经满足题意了,可以提前结束。同理,从右往左也这样进行一次。存起来作为后缀和suf[]。要保证数组原创 2021-01-22 02:30:57 · 399 阅读 · 0 评论 -
Codeforces1461E. Water Level(贪心/分类讨论/模拟)
Codeforces Round #689 (Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/112976212E. Water Level题意:一桶水。初始k升,每天要喝掉x升,每天可以给他加y升。问能否使得 水位在t天之内 始终保持在 [L-R]的范围内。思路:分类讨论。贪心。首先特判掉第一天。如果第一天可以加水,那先加个水再说。然后 如果第一天 一喝就小于 L 了,那显然没救了。否则就分情况讨论。如果y < x,原创 2021-01-22 02:13:18 · 216 阅读 · 0 评论 -
Codeforces Round #689 (Div. 2, based on Zed Code Competition)
A. String Generation题意:造一个字符串,只用’a’,‘b’,'c’三个字符。要求其中不存在大于k的回文子串。思路:水题。直接循环输出abcabcabc就好了。显然没有回文。AC代码:#include <iostream>#include <bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusing namespace std;const double原创 2021-01-22 02:10:30 · 237 阅读 · 0 评论 -
Codeforces Round #611 (Div. 3)
A. Minutes Before the New Year题意:给一个时间,求到24:00 还有多少分钟。思路:乱写。AC代码:#include <iostream>#include <bits/stdc++.h>#define int long long#define mk make_pair#define gcd __gcdusing namespace std;const double eps = 1e-10;const int mod = 1e9+7;原创 2021-01-22 01:45:49 · 165 阅读 · 0 评论 -
Codeforces Round #651 (Div. 2) - E. Binary Subsequence Rotation(贪心)
Codeforces Round #651 (Div. 2) 全文见:https://blog.csdn.net/qq_43461168/article/details/112577099E. Binary Subsequence Rotation题意:给定一个01串,要变成目标串。可以选择任意一个子序列。然后顺时针移动一次。也就是最前面的到最后面,其实的移动到前一个元素的位置。问需要多少次。思路:考虑贪心。首先,如果两个位置相等,那自然不用判断了。其次,选110或者001,这种也是非最优的选择,因为原创 2021-01-20 23:13:48 · 137 阅读 · 0 评论 -
Codeforces Round #636 (Div. 3) - E. Weights Distributing(BFS,贪心)
Codeforces Round #636 (Div. 3) 全文见:https://editor.csdn.net/md/?articleId=112727618E. Weights Distributing题意:给定一个无向图。给定一个权值数组。要把权值分配到每条边上,使得从a到b再到c经过的总边权和最小。思路:显然,把最小的权值分配到最短路径上就是最优解。考虑一个朴素的想法。就是先求a-b的最短路径。然后把小权值分配上去。再求b-a的最短路径,把剩下最小的边权分配上去。但是这样肯定是不对的。如下原创 2021-01-20 16:00:31 · 108 阅读 · 0 评论 -
Codeforces Round #693 (Div. 3) - F. New Year‘s Puzzle(分类讨论)
Codeforces Round #693 (Div. 3) 全文见:https://blog.csdn.net/qq_43461168/article/details/112596814F. New Year’s Puzzle题意:给定一个2*n的矩形。不过有一些块被ban掉了。然后用 2*1 和 1*2 的砖头把他铺满。问能否铺满。思路:其实就一个分类讨论的题。先对黑块排个序。然后遍历。分很多种情况。先假设 up = 1表示 底下是黑块,而上面放了一个躺着的块。 down = 1表示下面放了一个躺原创 2021-01-20 11:18:24 · 163 阅读 · 0 评论 -
Codeforces Round #644 (Div. 3) - H. Binary Median(思维)
Codeforces Round #644 (Div. 3) 全文见:https://blog.csdn.net/qq_43461168/article/details/112549889H. Binary Median题意:给出n个二进制数和一个m。表示从[0,2m-1] 中删除这些数。然后求剩下的中位数。思路:如果没有删除数,那么答案显然是 mid = (2m-1)/2,现在假设删除都是mid 右边的数。也就是 mid = (2m-n-1)/2。但是显然假设不成立。可能也会删mid左边的数。所以原创 2021-01-20 10:11:31 · 96 阅读 · 0 评论 -
Codeforces Round #696 (Div. 2)
A. Puzzle From the Future题意:给定一个01串a。然后要再找一个同长度的01串b。然后把这两个串加起来,得到串d。如0110 + 1101 = 1211,然后相同的数字会合并成一个数。1211 -> 121。求出这个串b。使得串d最大。思路:贪心。首先能+1的位置肯定先加1。那么考虑什么情况下,+1会使得串d变小。那就是 a[i]+b[i] 等于上一位的数。那么这位数就等于浪费了。第一位肯定是+1的。然后用pre上一位。遍历到 i 的时候,如果+1 会使得和前一位相同,那么原创 2021-01-20 01:50:56 · 297 阅读 · 0 评论 -
POJ-3007-Buried memory(最小圆覆盖/模拟退火)
Buried memoryProblem DescriptionEach person had do something foolish along with his or her growth.But,when he or she did this that time,they could not predict that this thing is a mistake and they will want this thing would rather not happened.The world原创 2021-01-19 14:56:39 · 147 阅读 · 1 评论 -
POJ-2069-Super Star(最小球覆盖/模拟退火)
Super StarDuring a voyage of the starship Hakodate-maru (see Problem 1406), researchers found strange synchronized movements of stars. Having heard these observations, Dr. Extreme proposed a theory of “super stars”. Do not take this term as a description原创 2021-01-19 14:38:42 · 404 阅读 · 0 评论 -
2018 ICPC Nanjing Regional Contest
A. Adrien and Austin题意:博弈。n个石子,每次可以选连续的 1-k 个。问谁赢。思路:签到题。但我没签上来。还是开局两小时后队友签上的。AC代码:#include <bits/stdc++.h>#define ll long long using namespace std;const int INF = 0x3f3f3f3f;const int MOD = 1e9+7;const int MX = 1e6+7;int mon[505];int mai原创 2021-01-19 01:47:54 · 690 阅读 · 0 评论 -
Codeforces Round #684 (Div. 2)
A. Buy the String题意:01串,买一个0代价c0,买一个1代价c1。可以改变01的值,代价为h。求最小代价。思路:贪心。如果0变成1再买更便宜就先变成1再买。 1同理。AC代码:#include <bits/stdc++.h>#define int long longusing namespace std;const int N = 4e5 + 10;const int mod = 1e9+7;const int inf = 1e18;int t,n,m,k;原创 2021-01-18 12:13:56 · 175 阅读 · 0 评论