- 博客(34)
- 收藏
- 关注
原创 BAPC 2015 组队赛 2
题目链接A - Freight Train思路:阅读理解题,题意很难读,读懂后二分贪心模拟就行#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define int long longusing namespace std;typedef pair<int, int> PII;typedef long long ll;const int INF = 0x3
2022-03-07 21:15:09
206
原创 Codeforces Round #771B - D
题目链接B. Odd Swap Sort题意:相邻数字和为奇数可交换,问是否能不严格升序排列思路:不难得出只有相邻数奇偶性不同时才可交换,所以只用考虑单独的奇数和偶数,即奇数和偶数不能降序排列,否则必然要经历一次同奇偶的交换操作,不满足题意代码:#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define endl '\n'
2022-02-15 22:13:43
567
原创 Codeforces Global Round 19 A - D
比赛链接A. Sorting Parts思路:签到,判断是否是升序代码:#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define endl '\n'#define bug(x) cout << #x << ":" << x << endl;using namespace s
2022-02-15 17:52:11
384
原创 Educational Codeforces Round 122 A - D
题目链接A. Div. 7题意:给定一个数n, 操作可以每次修改一位数的值,用最小操作数使得可以被7整除,并求出这个数思路:注意到n大于等于10, 整除7个一循环,枚举最后一位即可代码:#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define endl '\n'#define int long longusing n
2022-02-13 16:22:52
2718
原创 Winter Individual Contest - K部分题解
I - Ivan and the swimming pool 题目链接题意:给你高度图,让你选择一个联通区域,要求面积至少为S,连通区域的高度取决于最低高度,求可能的最高高度思路:竟然没想到二分直接寄 二分高度BFS判断就行,以后做题思维要敏锐代码:#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define endl '
2022-02-11 23:04:41
319
原创 2022牛客寒假算法基础集训营2
比赛链接H 小沙的数数题目分析:优质题解题眼 a xor b 的最优情况为 a + b,所以原序列最大的xor即为m,数m二进制中有几位1,答案就是这些1分配到n个位置,即为n的x次方,注意刚开始也要取模代码:#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define int long longusing namespa
2022-01-27 17:50:00
56
原创 Nightmare Ⅱ HDU - 3085
题目链接题目思路:男女孩同时移动,需要双向广搜,我们可以开男生队列与女生队列存入位置,每次按步数step来枚举,对于男生,每次扩展三步,如果发现女生已经走过,则直接返回step,对女生来说,每次扩展一步,如果发现男生已经走过,则直接返回step,因为鬼每次先走,需要先判断当前点与鬼的曼哈顿距离是否满足题意代码:#include <bits/stdc++.h>#define x first#define y second#define fi first#define se seco
2022-01-03 12:48:59
437
原创 Magic Cube ZOJ - 2477
题目链接题意:给出魔方初始图,每次从6个面中选一个面进行旋转操作,求还原魔方所需要的最小步数,并输出每次操作和旋转方向,答案保证在5步以内题目分析:很恶心的一道题,题意5步一眼IDA* 启发函数也挺好想,找出每个面与中心颜色不同的数量, 每次旋转最多改变12个, 当不同数量/12>深度时剪枝,每次操作我们可以打表模拟6种操作时会导致的位置变化不懂操作变化的可以点击代码:#include <bits/stdc++.h>#define x first#define y sec
2022-01-03 12:40:02
101
原创 DNA sequence HDU - 1560(IDA*)
题目链接题意:题目分析:首先注意到n的范围很小,可以得知答案序列并不会很长,直接深搜我们需要记录每一个序列正在匹配的位置,可以使用IDA* 来优化,启发函数就是当前未匹配的序列中的最大长度,这里我们假设其它未匹配序列都是最大长度的序列的子序列,故能验证启发函数的正确性代码#include <bits/stdc++.h>#define x first#define y second#define fi first#define se second#define pb push
2022-01-03 12:13:35
87
原创 Eight II HDU - 3567
题目链接思路:启发函数依旧是初始位置与目标位置之间的曼哈顿距离,可以用IDA* 迭代加深来做,题目让输出字典序最小的方案,所以我们可以按 d, l, r, u 搜索顺序即可,注意每次搜索要记录上次操作,避免进行与上次相反的操作开始以为和八数码1的做法并没有区别,就按A* 来做一直T,结果换成IDA* 就过了代码#include <bits/stdc++.h>#define fi first#define se second#define fast ios::sync_with_s
2022-01-03 00:50:35
316
原创 AcWing 179. 八数码 178. 第K短路 (A-star)
A-star 算法算法证明略做题步骤:如果搜索空间过大,考虑使用A*算法,正常做真实距离,思考估价函数,验证估价函数的正确性,队列换成优先队列,新加一维 真实+估计,终点出队即为答案AcWing 179. 八数码题目链接估价函数:当前状态种每个数与它的目标位置的曼哈顿距离之和把数码存在解的条件:逆序对为偶数估价函数涉及到曼哈顿距离的情况很多代码:#include <bits/stdc++.h>#define fi first#define se secondusin
2021-12-21 17:48:36
254
原创 Pots POJ - 3414(BFS+记录路径)
题目链接思路:结构体中建立一个路径数组,用来记录路径,满足要求输出,其他就和简单bfs一样,注意分类讨论六种操作代码#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<vector>#include<stack>#include<bitset>#incl
2021-12-10 22:55:30
131
原创 Fliptile POJ - 3279(状态压缩+二进制枚举)
题目链接题意:给你一个01矩阵,每次操作选择一个格子,使得该格子与上下左右四个格子的值翻转。 至少多少次操作可以使得矩阵中所有的值变为0?请输出翻转方案,若没有方案,输出"IMPOSSIBLE”。若有多种方案符合题意,请首先输出翻转次数最少的方案;若方案个数仍不唯一,则输出字典序最小的方案。题目分析:分析题目如果单纯爆搜的话O(2^N*M)肯定会超时,这里我们想到一些优化首先改变前一行的1只有对下一行的同一列位置进行操作,我们由此想到,前一行的状态如果固定的话,下一行的状态也就固定的,我们可以
2021-12-10 21:03:49
550
原创 kuangbin带你飞]专题1简单搜索 个人向总结
题单传送门棋盘问题 POJ - 1321简单dfs问题,按行枚举,dfs标记每列就可以,注意回溯。Dungeon Master POJ - 2251第一次做三维bfs,注意下方向就行,其余还是简单bfs问题。Catch That Cow POJ - 3278第二次做了,记得第一次并没看出是bfs,dfs剪枝了半天,每种操作可以代表着三条线路,注意在bfs中设置一个上下限,x<0||x*2>N 剪枝。Fliptile POJ - 3279鸽Find The Multiple P
2021-12-10 17:45:46
115
原创 codeforces D. Bash and a Tough Math Puzzle(线段树 GCD 思维)
题目链接题意:给定一个数组,m个操作1 l r x 查询l r区间是否可以至多修改一个数,使得区间的GCD变为x2 x y 将啊a[x]修改为y思路:单点修改+区间查询固然想到线段树维护区间的GCD,但问题在于查询操作,要想使得区间GCD变为x,则区间的值全为x的倍数,且存在x值,这里我们递归查询[l,r],如果当前区间GCD为x的倍数,则递归结束,否则说明此区间有叶子区间的GCD不满足要求,继续递归下去。代码:#include<cstdio>#include<cstri
2021-11-29 14:03:25
97
原创 组队赛9 2018CCPC桂林站部分题解
题目链接G - Greatest Common Divisor (差分+GCD) 题意:给定一个数组,每次可以将数组中的所有数加1,求使所有数字的最大公约数>1的最小操作次数,无法操作输出-1题目思路:代码:#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define int long long#define fast
2021-09-25 01:15:10
313
原创 cf C. AquaMoon and Strange Sort(思维)
题目链接题意:给定一个长度为n的数组,每个数字有一个方向,初始全部朝右,每次可以进行一次操作,可以选择两个数字交换他们的位置并且方向改变,求进行若干次操作,是否能将数组变为升序排列且方向全部朝右。题目分析:由方向的改变我们可以得知,每个数字如果想要移动至正确位置, 必须进行偶数次操作,如果是奇数,方向就会相反,由这个性质我们可以想到偶数位置上的数,结果也必须在偶数位,奇数位置上的数,结果也必须在奇数位。我们记录每个数字初始所在位置,然后排序进行比对。代码:#include<bits/s
2021-09-24 18:49:30
149
原创 cf构造题(11/50)G. Special Permutation
题目链接题意:构造一个长度为n的序列,满足相邻数差的绝对值在2~4之间,无法构造输出-1题目分析:n如果<=3一定无法构造,其他情况 所有奇数从大到小 +4 +2+剩下所有偶数从小到大代码:#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define int long long#define debug(x) std::
2021-09-15 23:45:05
227
原创 cf构造题(10/50)D. Constructing the Array(优先队列)
题目链接题意:一个长度为n的数组,初始全为为0,设置一个时间戳,每次进行一次操作,选择一段区间,将区间的中点更新成时间戳的值,直到区间中所有数都进行完操作,区间的选择应该优先长度最大,然后左端点最小的顺序来枚举题目分析:优先队列维护区间左右端点模拟一遍即可,但语法没写对需要复习优先队列的自定义排序语法代码:#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#define
2021-09-15 23:38:10
182
原创 cf构造题(9/50)D. Binary String To Subsequences
题目链接题意:现在定义一个子序列需要满足连续且不能含有相邻的0或1,给定一个由0和1组成的序列,求每个数字所在的子序列编号题目分析:维护两个队列,一个存放以1为结尾的子序列编号,另一个存方以0为结尾的子序列编号,从左到右模拟,如果为1,则寻找以0为结尾的子序列,标记编号,弹出0然后将1放入以1为结尾的队列中,如果不存在,新开一个。0的情况同理。代码:#include<bits/stdc++.h>#define fi first#define se second#define
2021-09-15 23:17:15
84
原创 cf构造题(7/50) B. Codeforces Subsequences
题目链接题意:构造一个字符串,使构造出的字符串中“codeforces”字串的数量大于等于k,且是满足条件的字符串的最小长度题目大意:其实思路挺好想,虽然k的取值很大,但想想就会发现,每增加一个字母,答案的数量指数增长,所以这里最优情况的应该是不改变字母的相对位置,每次增加一个,因为每次是使答案增加的最优操作,所以当答案数量>=k结束即可做的时候读错题了,因为受样例影响,以为是恰好为k个,一直在想质数的情况代码:#include<bits/stdc++.h>#define
2021-09-15 22:58:21
137
原创 cf构造题(6/50) B. Phoenix and Beauty
题目链接题意:给定长度为n的数组,每次可以在数组任意位置插入任意数,求满足长度为k的子区间和全部相等的任意一种排列题目分析:首先如果初始数组中不同种类的数字如果大于k,将不能构造出答案,如果数组是由一个长度为k的区间的整数倍出现的情况下,一定满足题意,这里注意到满足题意的数组长度最大不会超过1e4,这里可以直接暴力构造,提前存出不同数字的种类,然后将n个数扩充成n个长度为k的区间,如果区间长度不足k时,用1补全即可代码:#include<bits/stdc++.h>#define
2021-09-13 22:27:17
181
原创 cf构造题(5/50) C. Element Extermination
题目链接题意:给你n大小的数组排列,现在如果有两个连续的数满足a[i] < a[i+1],那么你可以删去其中的一个数,求在进行上述操作后,是否可以只剩一个数字题目分析:代码很简单,但思路却很有趣,我们模拟可以发现,对于一个任意排列的数组,我们可以进行若干次操作后,剩下的绝对是一个数(满足要求)或一个递减的序列,当数组a[1]<a[n]时,我们对(1,n)中的数进行操作,剩下的数一定可以通过a[1]或a[n]来进行操作使得只剩下一个代码:#include<bits/stdc++
2021-09-13 20:38:08
117
原创 cf构造题(4/50) C. Rotation Matching
题目链接题意:给定两个数组由1-n组成,将一个数组整体向右或向左平移(末尾移至开头),求两个数组最多能匹配数字的数量题目分析:每次移动完再判断肯定超时,我们发现数组由1-n组成,所以说每个数字所能匹配的数字移动的距离是固定的,我们可以分别计算得出每个数字匹配成功所要移动的距离,最多的数量就是最多的移动相同的距离。代码:#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#de
2021-09-13 19:41:02
179
原创 cf构造题(3/50) A - Great Graphs(贪心+构造)
题目链接题目大意:给定从1开始到n个点之间的距离数组d,让你构造一个图使得总权重最小(可加负权边)题目分析:分析样例可以得知相邻点的权重对答案总贡献一定为0,即隔点才会产生贡献,举个例子,如果n为5,那么答案就会是3->14->1 5->1 4->2 5->2 5->3 权重和取负,这里可以发现节点编号越大出现次数越多对答案贡献越多,这里我们考虑从小到大排序从而保证结果最优,注意计算权重我们可以用前缀和数组进行计算。代码:#include<bits/
2021-09-13 13:21:39
223
原创 组队赛4th 2017中国大学生程序设计竞赛-杭州站
比赛链接A - Super-palindrome (贪心) 题意:给定一个字符串,每次可以改变任意一个字母,求使所有长度为奇数的子串变为回文串的最小操作次数题目分析:签到题,随便举个例子可以发现,满足要求的字符串必须满足奇数位和偶数位的字符全部相等代码:#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define int l
2021-09-13 00:09:28
62
原创 个人赛 AtCoder Beginner Contest 213 C-E
题目链接C Reorder Cards 题意:在n*m中给定k个卡片的坐标,如果发现当前行列没有卡片,就将所有卡片的坐标向左向上移动题目分析:首先明确结果是留下卡片的行列的相对坐标,并且我们只关注当前行列是否有卡片,与卡片个数无关,这里可以分别离散化处理出行列的坐标,然后对所有点进行二分查找,二分出的位置就是相对位置代码:#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#
2021-09-04 17:05:52
148
原创 个人赛 The 2017 North America Qualification Contest 部分题解
比赛链接B - log2(N) 题意:给定n个点m条边组成的无向图,给定起点和终点,其中会提供机票使有的线路直接到达无需花费(单程且只能选择一次),求从起点到终点的最短路。题目分析:首先明确机票可以选择也可以不选择,可以先跑一遍dijkstra找出最短距离,然后加入机票航线并不断更新最小值,且每次更新完需要删除新加入的机票航线,当时删除边的操作脑子有点乱,当时数组模拟邻接表有点遗忘h数组的含义代码:#include<bits/stdc++.h>#define fi first#
2021-08-28 10:22:40
154
原创 Day1 AtCoder Beginner Contest 215 B-F
比赛链接B - log2(N) 代码:#include<bits/stdc++.h>#define fi first#define se second#define pb push_back#define pf push_front#define int long long#define fast ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)using namespace std;typedef long long
2021-08-25 23:48:03
140
原创 CF455A Boredom(简单dp)
题目链接题意:给定长度为n的序列,选择任意数a[k]删除并获得a[k]的价值,同时等于a[k]+1 a[k]+1的数也将全部被删除,求获取价值的最大值输入:长度nn个数输出:价值最大值样例:题目分析:首先先贪心选取发现无法保证最优解,当前数的选取取决于前一个数的状态,且每一步的选取的价值等于当前数*次数建立dp[N][2]数组,表示x选或不选的最大价值,dp[i][0]表示不选,dp[i][1]表示选状态转移 :dp[i][1]=dp[i-1][0]+
2021-08-06 11:00:11
160
原创 SDUT 堆基础
堆1.定义堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆满足以下性质:①堆中某个节点的值总是不大于或不小于其父节点的值。②堆总是一棵完全二叉树。(完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。)2.类型①大根堆:任何一个子树的最大值都在这个子树的根结点。②小根堆:任何一个子树的最小值都在这个子树的根结点。3.应用①堆排序(时间复杂度:n∗logn)②寻找最值4.
2021-07-30 00:34:02
172
原创 团体赛搜索1补题
7-1 列出连通集给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1 v2 … vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。输
2021-04-17 19:51:33
508
原创 PTA 集合相似度(set运用 求并集交集)附set知识
题目链接输入样例:33 99 87 1014 87 101 5 877 99 101 18 5 135 18 9921 21 3输出样例:50.00%33.33%题意:首先要读懂题目,这里分析第一个样例 Nc为交集个数,也就是87 101 Nt为合并集合去重后的个数,也就是99 87 105 5思路:运用set的不重复性 推出结果为 交集个数/(集合1的元素个数 + 集合2的元素个数 - 两个集合共有的元素个数)交集可以用find函数求出 合并后的集合个数也就是原本集合的大小-
2021-04-14 17:41:47
380
原创 Genta Game Gym - 101778H
Kojima Genta is one of the best friends of Conan, and the fattest one!Everyone believes that Genta is just thinking about food. So, he wants to prove the opposite. So, his friends challenged him in a game. Genta’s friends will give him a string s of lengt
2021-04-03 19:59:06
85
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人