
基础专题
贪心二分三分模拟等等
Buyi.
努力进大厂
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
*[2020上海ICPC]D. Walker(贪心+二分)
题目链接:http://codeforces.com/gym/102900/problem/D题意:一个坐标轴[0,n]上面有两个点p1,p2,这两个点分别可以以v1,v2的速度向正方向或反方向移动,求轨迹覆盖整个坐标轴的最小时间解题思路:一开始想法是多分几种情况比如:①一个人走完全程②两个人相对着走到端点③两个人先向两端走,然后在中间某点回合④两个人先往中间走,在某点会和后往两边走但是其中第三种和第四种分别讨论的子情况太多了,一直wa在第10个样例上参考了网上的不同的思路,发现可以直接原创 2020-12-23 17:34:56 · 810 阅读 · 0 评论 -
[2020上海ICPC]M. Gitignore(模拟+思维)
题目链接:http://codeforces.com/gym/102900/problem/M题意:给出n个要删除的文件路径,同时给出m个不能删除的文件路径。每次删除都只能删除一个文件或者一个文件夹(和该文件夹内的所有文件),问最少需要删除多少个路径解题思路:这题直接模拟即可,将n个要删除的放在str1组中,将m个不能删除的放在str2组中,先将m个不能删除的所包含的路径全部标记为1,再去处理n个要删除的路径。当处理到的路径未被标记(即标记为0),那么可以直接删除掉,并将该路径标记为2。如果处理到原创 2020-12-18 10:44:08 · 931 阅读 · 0 评论 -
[2020上海ICPC]B. Mine Sweeper II(构造+思维)
题目链接:http://codeforces.com/gym/102900/problem/B题意:扫雷游戏,X表示雷,.表示无雷区,每个无雷区上面有一个数字,记录该位置处周围8个位置有多少个雷。现在给出A矩阵雷区和B矩阵雷区,它们无雷区数字之和为suma,sumb,要求(int)(nm/2)次将B矩阵雷区变化成sumb=suma解题思路:首先要找到一个规律就是,将一个矩阵的雷区全部变成无雷区,无雷区全部变为雷区,最后得到的sum相同。然后去找A矩阵与B矩阵每一个位置处不同的数量cnt,如果cnt&原创 2020-12-18 10:35:33 · 1651 阅读 · 1 评论 -
*NOJ2446.小陈的气球(树状数组+区间处理+离线处理)
题目链接:https://acm.njupt.edu.cn/problem/NOJ2446题意:有n个气球,每次把区间[L,R]之间的气球去掉,问还剩下多少中颜色的气球解题思路:①先将气球序列扩大两倍,记录下前i个气球中的种类数sum和每一个位置处气球对应相同颜色的下一个气球的位置Next②离线处理询问,那么题目中的删除[L,R]区间内的气球,求[1,L-1]和[R+1,N]之间气球的颜色就可以转换为求[R+1,N+L-1]区间内的气球个数,同时将R+1看成L,N+L-1看作R,重新保存到结构体中原创 2020-11-27 12:47:27 · 164 阅读 · 0 评论 -
幸运匹配(贪心)
贪心处理,每一个数优先和自己相等的数匹配,其次和比自己大一位的匹配即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string.h>#include<string>#include<vector>using namespace std;const int maxn = 1e5 + 10;#define ll long l...原创 2020-11-25 18:15:28 · 595 阅读 · 0 评论 -
天梯赛(桶排序优化)
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<math.h>using namespace std;const int maxn = 5e4 + 10;int n,m;int maxg;long long A, B;priority_queue<int...原创 2020-11-25 18:12:59 · 257 阅读 · 0 评论 -
幸运序列(整体处理+中位数定理)
解题思路:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<algorithm>#include<math.h>using namespace std;#define ll long longconst int maxn = 1e5 + 10;cons..原创 2020-11-25 09:33:15 · 330 阅读 · 0 评论 -
2020CCPC绵阳K.Knowledge is Power(互质数分解)+两数互质规律总结
两个数互质的十种情况:1、两个数都是质数,这两个数互质2、两个连续的自然数互质。如:8和9、14和153、两个连续的奇数互质。如7和9、11和134、两个不连续的奇数但只相隔一个奇数的两个数互质。如13和17、15和195、两个合数不含相同质因子的两数互质。如:4和9,6和256、1和任意一个自然数互质。如:1和8,1和507、2、4或8和任意一个奇数互质,如:2和9,4和218、3、7或11和任一个不成倍数关系的两数互质。如:3和11,7和25,11和149、5和另一个末尾非0非5的数互原创 2020-11-11 23:25:36 · 829 阅读 · 0 评论 -
2020CCPC绵阳D.Defuse the Bombs(二分)
题目链接:http://codeforces.com/gym/102822题意:n个炸弹,每次只能让一个炸弹的时间不变,其余炸弹爆炸时间均减少1,但有一个炸弹爆炸时间小于0时,那么就会爆炸。问最长可以拖延多少时间解题思路:使用二分,将一个时间认为是可以最大的爆炸时间,然后算出比该爆炸时间小的炸弹求和得到sum,如果sum<=当前爆炸时间,那么说明当前爆炸时间是满足的,可以继续像右二分。反之,向左二分查找PS:注意对ans、res、l、mid、r开long long时间复杂度:NlogC实现代原创 2020-11-11 16:21:44 · 499 阅读 · 0 评论 -
HDU6827(多校第六场).Road To The 3rd Building(思维+线性逆元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6827解题思路:本题多次使用逆元操作,使用快速幂时间复杂度为O(nlogn),使用线性求逆元时间复杂度为O(n)线性求逆元求可以按规模k来寻找规律当k=1时,分子为ans[1]=(a1+a2+…+an)/1=(sum[n+k-1]-sum[k-1])/1=p[1]/1;k=2时,分子为ans[2]=[(a1+a2)+(a2+a3)+(a3+a4)+…(an-1 +an)]/2=[(p[1]+(sum原创 2020-08-08 00:01:01 · 189 阅读 · 0 评论 -
2020暑期牛客多校第六场C.Combination of Physics and Maths(贪心+数学)
题目链接:https://ac.nowcoder.com/acm/contest/5671/C题意:选取任意数量的行和列,这些行和列的交点取出来作为一个新的矩阵。P=F/S,F值为矩阵内所有值的和,S为矩阵最下面一行的值的和,求P的最大值解题思路:贪心做法,思路是因为S只取最下面的数值和,所以对于新矩阵最下行上面的行全部都取,这样S不变的情况下,F最大up[i][j]记录下第j列往下i个数的总和令第i列P为YX\frac{Y}{X}XY,第j列P为MN\frac{M}{N}NM,YX\frac原创 2020-08-03 01:10:51 · 147 阅读 · 0 评论 -
2020暑期牛客多校第七场B.Mask Allocation(迭代/递归)
题目链接:https://ac.nowcoder.com/acm/contest/5672/B题意:将总数为n*m的口罩,分成m份n个口罩和n份m个口罩,现在问最少一共需要多少个箱子来拼凑(多个箱子可以合成一份)解题思路:很容易发现处理的方式,取n和m中小的那个数为n,现在假设n为小的那个值,初始状态为m个装有n个口罩的箱子,保留n个有n个口罩的箱子,然后将剩下的m-n个包含n个口罩的箱子拆分,每次都尽可能的拆分成最大的数来将n个n个口罩的箱子补齐为n个m个口罩的箱子这一过程可以看做一个递归过程,每次原创 2020-08-03 00:48:31 · 163 阅读 · 0 评论 -
CF67A.Partial Teacher(最长不下降子段/DP)
题目链接:https://vjudge.net/problem/CodeForces-67A解题思路:第一种,寻找每个点的所在位置的峰值。向左走,遇到R,左高度+1,遇到L停止。向右走,遇到L,右高度+1,遇到R停止。最终i点峰值高度ans[i]=max(左高度,右高度)+1第二种:使用DP当s[i]为’='时,dp[i]=dp[i-1]当s[i]为’L’时,dp[i]=1,如果dp[i-1]也为1,dp[i-1]++,此时向左遍历,遇到L则dp[j]++,遇到R终止当s[i]为‘R’时,dp[原创 2020-07-30 09:11:33 · 202 阅读 · 0 评论 -
HDU6794(HDU第三场多校).Tokitsukaze and Multiple(贪心+map/dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6794题意:找到最多的不相交的子段使得子段和为p的倍数解题思路:按照序列顺序依次遍历加上各个点cur=(cur+a[i])%mod,如果cur的值在之前j点处出现过,那么说明j到i点之间的数为p的倍数两种处理方式,第一种是贪心,从前往后,遇到能够拼凑出p的倍数的情况直接拼凑,因为如果就算不在当前情况i拼凑,在后面的j进行拼凑,结果仍然是ans++,而且还会影响后面的拼凑。使用map来记录,使用map.co原创 2020-07-29 09:04:23 · 392 阅读 · 0 评论 -
HDU6795(HDU第三场多校).Little W and Contest(并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6795题意:club中三个互相都不认识的人且三个人中能力值为2的至少有两人可以组成一个team。并且,A和B相识,B和C相识,那么A和C相识。一共有n-1次让两个不认识的人相识,求每次交友后可以组成多少种不同的team解题思路:交友问题很显示使用并查集,将相互认识的人放在同一个并查集中,同一个并查集中的人不能够成为队友。保存总的1能力值人数为num[0],总的2能力值人数为num[1]。每个并查集中pre原创 2020-07-29 08:13:28 · 297 阅读 · 0 评论 -
CF602C.The Two Routes(思维+完全图+bfs)
题目链接:https://vjudge.net/contest/385137#problem/B题意:给出n个点和m条铁路,输入m条铁路,如果两个点之间没有铁路直接相连,那么这两点之间存在公路,每次在两点间的公路或是铁路都耗时1,问两人分别使用公路和铁路从1点到n点共同需要的最少时间解题思路:通过理解题目,可以发现这是一个完全图,任意两点都有公路或者铁路的直接相连,所以一定有公路或铁路可以直接从1点到n点,耗时1,然后再对另一种交通方式进行bfs求得需要的最少时间即可#include<iost原创 2020-07-28 10:24:39 · 208 阅读 · 0 评论 -
CF846D.Monitor(二分+二维前缀)
题目链接:https://vjudge.net/problem/CodeForces-846D题意很好理解解题思路:sum[i][j]保存的是(i,j)到(0,0)之间组成的长方形区间所有的被破坏的点的数量利用二分进行查找最小的时间点即可二分有两种写法:第一种是找到被破坏点最大的时间maxt,L=0,R=maxt,进行查找还有一种是将q个被破坏点按照时间大小排序,L=1,R=q,这样按照被破坏点的时间点来进行二分查找PS:主要t的范围是0到1e9,所以我们在使用第一种二分方法时,注意L要初始原创 2020-07-28 10:09:28 · 193 阅读 · 0 评论 -
**2020暑期牛客多校第六场K.K-Bag(思维+离散化)
题目链接:https://ac.nowcoder.com/acm/contest/5671/K题意:k-bag序列指由一个或多个1-k排列组成的序列part-k-bag序列指k-bag的一个连续子序列解题思路:参考每两个相同元素不可能同时在同一个长度为k的序列中用len[i]表示从i开始的最长的序列,即从i开始无重复数的序列长度pre[i]表示当前前面有多少个数字i具体代码解释可以看注释PS:因为k最大可以为1e9, n最大可以为5e5,所以使用离散化把数组压缩到5e5以内,防止数组过大原创 2020-07-27 22:29:41 · 1698 阅读 · 0 评论 -
2020暑期牛客多校第五场E.Bogo Sort(环+LCM+大数模版)
题目链接:https://ac.nowcoder.com/acm/contest/5670/E题意:给出一个固定的置换,问有多少组数组可以通过这个置换得到一个有序的序列(1 2 3 … n)解题思路:因为置换是固定的,所以只需要求出一个有序的序列(1 2 3 …n)可以通过多少次置换再次回到原来的样子即可然后直接求出每个数经过多少次可以回到原来的位置,求出这些次数的公倍数就可以求出总的序列经过多少次可以回到原来,但这样做会超时可以发现每个数经过的位置是一个循环,每个处于循环中的数都可以经过相同的次原创 2020-07-26 22:15:06 · 348 阅读 · 0 评论 -
2020暑期牛客多校第五场I.Hard Math Problem(思维)
题目链接:https://ac.nowcoder.com/acm/contest/5670/I题意:有三种 H G E,每个H要有至少一个G和一个E直接相邻,问n和m趋于无限大的时候最多可以有多少个H解题思路:因为n和m趋于无限大,就不要再考虑边界情况了,每一排都是GHHGHHGHH或是EHHEHHEHH其实G和E是呈斜线轮流变化的所以最后结果是2/3#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<c原创 2020-07-26 22:03:30 · 253 阅读 · 0 评论 -
2020暑期牛客多校第五场D.Drop Voicing(最长上升子序列+思维)
题目链接:https://ac.nowcoder.com/acm/contest/5670/D解题思路:两种操作相结合可以实现把任意位置的点移到任意位置可以把p数组看成一个环形,把初始指针放在最后一位drop操作相当于把指针指向的数前移一位一次drop后invert操作相当于将指针后移invert一次后所以对于一个数可以通过invert到达这个数的位置,然后通过drop将它移动到想要的位置,这样就是ans++因此求出环形的最长不下降子序列len就可以了,对于其他的点通过上述的操作来移原创 2020-07-26 21:44:04 · 378 阅读 · 0 评论 -
2020牛客暑期多校第二场C.Cover the Tree(无根树+dfs)
题目链接:https://ac.nowcoder.com/acm/contest/5667/C题意:找出最少的路径来包括所有的树的结点解题思路:m为树的叶子结点答案个数最少应该是m/2向上取余个答案组合就是叶子结点连接叶子结点所以找到一个子节点个数>=2的结点当做根结点,从这个点开始dfs寻找叶子结点个数即可#include<iostream>#include<cstdio>#include<string.h>#include<vector原创 2020-07-21 23:16:10 · 192 阅读 · 0 评论 -
2020暑期牛客多校第三场C.Operation Love(找规律)
题目链接:https://ac.nowcoder.com/acm/contest/5668/C解题思路:以手掌的最下面那条长度为9的线为标准进行寻找可以发现长度为6的是大拇指,长度为8的是小拇指,分别记手掌最下面的那条线连接小拇指的为small点(图中2点),连接大拇指的为big点(图中1点)根据手掌五指的朝向(水平向左,向上,水平向右,向下四种情况,这四种情况可以根据大小拇指上下坐标关系来计算)来进行讨论即可,以手掌四指向上时为例,当big结点处的横坐标小于small结点横坐标时,此时相当于大拇原创 2020-07-18 21:26:41 · 244 阅读 · 0 评论 -
2020暑期牛客多校第三场A.Clam and Fish(贪心)
题目链接:https://ac.nowcoder.com/acm/contest/5668/A解题思路:利用贪心有四种池塘 0 1 2 3遇到2 3有鱼的池塘直接钓鱼,因为即使是备饵也是只能钓一条,不如直接抓获得一条,所以遇到s[i]=‘2’ 或‘3’时直接ans++对于0这种池塘,是有鱼饵的话直接使用对于1这种池塘,有使用鱼饵进行钓鱼和备饵两种选择,主要取决于后面池塘的情况。所以从后往前进行逆序遍历,使用emp记录当前空塘数量,clam记录待用有饵池塘数量遇到2 3,ans++遇到0, 则原创 2020-07-18 21:12:40 · 257 阅读 · 0 评论 -
三角迷宫(找规律)
题目链接:https://acm.njupt.edu.cn/problem/NOJ2363/editor解题思路:高度计算h:平方差向上取整ceil(sqrt(1.0x))计算右边r时从右边开始计算r=(hh-x)/2+1计算左边l时从左边开始计算:l=(x-(h-1)*(h-1)-1)/2+1最后最小移动距离为三个高度之间的差#include<iostream>#include<cstdio>#include<math.h>using n原创 2020-07-17 15:53:54 · 622 阅读 · 0 评论 -
HDU1078.FatMouse and Cheese(dp+dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078题意:给出n和k,n*n的矩阵中每一个位置都有一些奶酪,小老鼠每次行动最多走k个方格,且每次行动都要比上一次行动时吃到的奶酪数量多,问小老鼠最多可以获得多少奶酪解题思路:dp[i][j]表示到达位置(i,j)时可以获得的最多的奶酪数,小老鼠从(0,0)位置开始,每移动到一个位置进行一次dfs,然后递归回溯#include<iostream>#include<cstdio>#原创 2020-07-09 23:30:57 · 176 阅读 · 0 评论 -
CF475D.CGCDSSQ(区间操作+map)
题目链接:https://vjudge.net/problem/CodeForces-475D题意:给出n个数,和q个询问,每个询问给出x,要求回答有多少组[L,R]可以满足gcd(a[L],a[L+1],…,a[R])=x;解题思路:区间越大,gcd只会越来越小为了简化复杂度,将相同的gcd区间保存在一起,直接跳过就可以因为n的大小可以达到10^5,使用二维数组肯定不行,而且数值大小有10 ^9,使用一维数组也不行,所以使用map数组来保存gcd值对应的数量m保存先前gcd值对应的区间数ne原创 2020-06-16 13:56:07 · 272 阅读 · 0 评论 -
*CF1132D.Stressful Training(二分+队列+贪心)
题目链接:https://vjudge.net/problem/CodeForces-1132D题意:给n个笔记本,每个笔记本有初始电量ai和每个时间点耗电量bi,要求在整个会议k个时间内,给出最小单位时间充电量x来保证每台笔记本在每个时间点都是有电的(电量>=0),每个时间点只可以给一台笔记本充x电量。解题思路:先求出每个笔记本在什么时候电量耗尽需要充电,即ai/bi+1,然后按需要充电的时间点从小到大排序,即最需要充电的放在前面,这里直接利用优先队列就可以,遍历每个时间点1到k,如果当前笔记本原创 2020-06-09 23:39:51 · 245 阅读 · 0 评论 -
CF253D.Table with Letters - 2(前缀和+技巧暴力+模拟队列)
题目链接:https://vjudge.net/problem/CodeForces-253D题意:给出一个n*m的矩阵,要求找出四角字母相同,且含有a的个数不超过k的子矩阵数量解题思路:1、先对矩阵进行预处理,求出a的个数这里有两种预处理方式:①a[i][j]表示,第j列中第1行到第i行a的个数转换方式:a[i][j]=a[i-1][j]+(s[i][j]==‘a’);②a[i][j]表示从(1,1)到(i,j)位置处的a的个数转换方式:a[i][j]=a[i-1][j]+a[i][j-1]原创 2020-06-07 11:42:03 · 295 阅读 · 0 评论 -
CF233C. Cycles(贪心+思维)
题目链接:https://vjudge.net/contest/375342#problem/E解题思路:可以看成要组成k个三角形需要多少个三角形顶点,这些顶点之间如何连接。用一个vis[i][j]数组表示点i和点j之间的连接情况初始状态为两个顶点,并使vis[1][2]=vis[2][1]=1,保证连接然后使用for循环从i=3开始遍历,直接k个三角形全部被构造出来#include<iostream>#include<cstdio>using namespace st原创 2020-05-28 10:55:45 · 248 阅读 · 0 评论 -
CF798D. Mike and distribution(贪心+思维)
题目链接:https://vjudge.net/contest/375342#problem/B解题思路:主要突破口是在取的数的个数上,最多可取n/2向下取整再加1个数,也就是取的数永远比剩下的数多先按a数组有大到下排序,把a数组中最大的先取,然后再取n/2向下整个数,这向下取整个数在接下来的n/2向下取整个组中,每个组大小为2,挑取b大的就可以满足条件。注意奇偶数最后一位的选取问题,最后一组只有一个数的时候直接选就行#include<iostream>#include<cst原创 2020-05-28 10:39:32 · 144 阅读 · 0 评论 -
CF1175E. Minimal Segment Cover(倍增算法)
题目链接:https://vjudge.net/contest/374302#problem/C题意:给出n个区间[L,R],再给出m个询问L,R,问询问L,R范围是否全部被包括倍增板子:void ST(int n)///预处理{ for(int i=1;i<=n;i++) f[i][0]=a[i];///初始化以自己为起点2的0次方长的区间就是自己 for(int j=1;(1<<j)<=n;j++)///枚举区间长度 {原创 2020-05-21 10:36:35 · 245 阅读 · 0 评论 -
CF655C. Enduring Exodus(三分)
题目链接:https://vjudge.net/contest/374302#problem/B题意:有一个农民和他的n头牛去做旅店,现在要求选取n+1个旅店房间,让农民与他的牛的最大的距离最小解题思路:首先先把空的房间挑出来放到v中,为了让最大距离尽可能的小,农民应该尽量在牛群的中间住,而不是在两边。D=max(v[i]-v[L],v[R]-v[i]),D相当于一个开口向上的有极小值的曲线,从左到右先递减再递增,因此想到使用三分的方法来找极值点int threefind(int i,int j)原创 2020-05-21 10:13:18 · 256 阅读 · 0 评论 -
HDU4864.Task(贪心+桶排)
题目链接:https://vjudge.net/contest/374302#problem/E题意:给n个机器,每个机器有限定工作时长和等级要求,且只能进行一项任务。给出m个任务,要求求出能够完成的最多的任务数,和钱数解题思路:贪心,将任务按照时间从大到小进行排序,将满足当前的任务的时间要求的机器进行桶排序,先使用最小等级的机器即可#include<iostream>#include<cstdio>#include<string.h>#include<原创 2020-05-21 09:59:25 · 147 阅读 · 0 评论