![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分类题集
Honestbutter-
这个作者很懒,什么都没留下…
展开
-
最短路题集
Floyd算法原创 2021-08-29 15:13:18 · 129 阅读 · 0 评论 -
奇/偶排列问题
D - Swap Hats添加链接描述题意:给定R G B三个字母的排序,问通过恰好1e181e181e18次交换操作,能否将其变成给定的顺序?分析:1.令R=1,G=2,B=3,我们可以将其转化为(1,2,3)排列问题2.A组的三种排列可以通过一次操作变成B组中的排列,同理,B组中的三种排列也可以通过一次操作变成A组中的排列。如果A组中的一种排列要变成他相同组中的另一种排列,需要两次操作(先变成B排列,再变回A)。综上我们可以知道:通过偶数1e18次操作,如果两种排列在同一组中,就可以得到。原创 2022-03-21 10:35:42 · 2832 阅读 · 0 评论 -
MEX-A. Meximum Array
链接A. Meximum Array题意:每次把a序列前k个数的MEX值放进b序列中,然后删掉a序列的前k个数,重复操作,直到a数组为空。求字典序最大的b序列组成。思路:要使得b序列的字典序最大,那么先放入b序列的MEX值应该尽可能的大。所以我们第一次选取的MEX值应该是整个a序列可能的最大MEX值。然后删掉a序列中取得最大MEX值的长度为k的前缀,仍然选取剩余序列中最大的MEX值,重复操作。关键问题:1. 如何找到当前序列最大的MEX值cnt[i]:预处理数字出现的次数。注意cnt[原创 2022-02-17 17:46:54 · 385 阅读 · 1 评论 -
(DFS爆搜)AcWing 2005. 马蹄铁
添加链接描述DFS爆搜状态转移的关键特点:(可以走到(或)但是)只能走到),所以要记录上一个点的状态,从而判断当前点能否走更新答案要满足(的数量等于)的数量,所以爆搜时要记录#include<iostream>#include<algorithm>using namespace std;const int N=10;char g[N][N];bool st[N][N];int n,ans;int dx[]={0,1,0,-1},dy[]={1,0,-1,0原创 2022-02-16 20:16:10 · 259 阅读 · 0 评论 -
C. Inversion Graph
C. Inversion Graph链接法1:单调栈#include<iostream>using namespace std;const int N=2e5+100;int stk[N],tt,x,top;int main(){ int t; cin>>t; while(t--) { tt=0; int n; cin>>n; for(int i=1;i<=n;i++) { cin>>x;原创 2022-02-15 23:32:00 · 651 阅读 · 0 评论 -
二分答案,01分数规划(平均数/中位数转化),dp
题目链接大佬题解链接补充:关于平均值的01规划理解:∑ain≥mid\frac{\sum{a_i}}{n}≥midn∑ai≥mid∑ai∑i=1n1≥mid\frac{\sum{a_i}}{\sum_{i=1}^n1}≥mid∑i=1n1∑ai≥mid∑(ai−mid)≥0\sum{(a_i-mid)}≥0∑(ai−mid)≥0另外注意中位数是整数,平均值是浮点数我们知道对于某一个位置iii,既可以选这个数,也可以选他的下一个数,下意识的想用DFS,但是数据太大原创 2022-01-27 21:08:49 · 294 阅读 · 0 评论 -
二维dfs
链接#include<iostream>#include<algorithm>#include<cstring>using namespace std;typedef long long LL;const int N=20;int g[N][N],n;bool st[N];LL ans;void dfs(int u,LL x) //x记录答案{ if(u==n) { ans=max(ans,x); return; } int l=原创 2022-01-26 12:12:49 · 579 阅读 · 0 评论 -
K金牌厨师(双条件二分+差分)
链接二分+差分二分最大值,check得到满足两个条件的解。(以前做的都是满足一种条件的二分,注意体会区别)题目目的:让共同区间尽可能的长,并且共同区间数目尽可能的多。我们每次二分得到mid,既指人数,也指长度。然后第一个for循环记录长度满足≥mid的前缀和人数,第二个for循环差分得到符合≥mid的长度的人数,如果人数sum[i]≥mid,return true,(说明满足两个条件)。#include<iostream>#include<cstring>using原创 2022-01-26 11:39:38 · 491 阅读 · 0 评论 -
STL队列题目合集
P1996 约瑟夫问题链接#include<iostream>#include<algorithm>#include<queue>using namespace std;queue<int>q;int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++) q.push(i); int cnt=1; while(!q.empty()) { if(cnt原创 2021-09-16 20:47:09 · 138 阅读 · 0 评论 -
后缀表达式+中缀表达式
后缀表达式表达式树的后序遍历eg: (2+1)∗3=2 1 + 3 ∗(2+1)*3= 2~1~ +~ 3~ *(2+1)∗3=2 1 + 3 ∗顺序存储,用栈,倒序跳出。每次遍历到一个运算符,它的左右儿子恰好为它前面的两个元素,即栈顶的两个元素。跳出这两个元素然后按运算符运算后的结果放入栈中。P1449 后缀表达式链接#include<iostream>#include<algorithm&原创 2021-09-16 20:27:42 · 79 阅读 · 0 评论 -
区间题目汇总
最小区间覆盖https://www.acwing.com/problem/content/909/选择尽量少的区间,将指定线段区间[st,ed]完全覆盖。所有区间按左端点从小到大排序从前往后枚举每一个区间(双指针)在所有能够覆盖左端点st的区间中,选择右端点最靠右的区间更新st为选中区间的右端点(其实一开始初始化是找到能覆盖左边界st的区间中右边界最大的,然后此后就更新st=r(上一个入选区间的右边界),再寻找能覆盖上一个入选区间右边界的区间中右边界最大的区间,然后继续更新,最后如果原创 2021-09-15 19:17:00 · 494 阅读 · 0 评论 -
贪心题集汇总
贪心P3817 小A的糖果题意:数列相邻两个数的和不能大于x,每次进行的操作可以-1,问最少进行多少次操作使数列符合条件思路:从第一个元素开始往后模拟分析。cnt记录操作次数如果a[1]+a[2]>x,我们需要对其中一个数字进行减法操作,对那个数字减呢?——第一个数字只会和第二个数字组成一对,但是第二个数字还会和第三个数字组成一对,所以我们对第二个数字进行操作cnt+=x-a[2]-a[1],这样还可以同时减小后面一组的总数。后面的所有组都类推,我们每次都只对每一组的第二个数字进行操作。原创 2021-09-12 21:44:46 · 135 阅读 · 0 评论 -
打水问题——模拟
接水问题链接题意:给出数字m,n,规定共有n个人排队接水,有m个水龙头。每秒只能接1滴水,当某一个人接完了,按照后面排队的人的给定顺序补位,问全部接完水需要多少秒思路:一开始想用贪心,小根堆+每次弹出最小的值,减去最小的值。。发现做不出来。这个时候就要想到直接**按秒模拟.**数组存储,设一个指针j用来向后移动指向子准备接水的下一个人。指针每向后移动一次说明前面有接完水的人,如果要让全部的人接完水,指针要向后移动n次,指针初始位置为m+1,当指针位置在n+m+1位置的时候全部的人已经接完水了原创 2021-09-01 16:39:30 · 197 阅读 · 0 评论 -
二分查找题集
公式类(一) 求x的三次方根链接#include<iostream>#include<algorithm>using namespace std;double sq(double x){ return x*x*x;}int main(){ double x; cin>>x; double l=-10000,r=10000;//数字范围(左右边界) while(r-l>1e-8)//保证精确度(一般比指定精确度高2原创 2021-08-31 19:02:00 · 196 阅读 · 0 评论