自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 B. Take Your Places!(思维)

题目链接题意:给出一个序列,序列中相邻的数可以交换位置,问最少交换多少次使得奇偶性质相同的数不相邻。思路:因为如果交换过后的数组的如果为奇数开头,那么所有的奇数都在奇数位,而如果以偶数开头,那么所有的偶数都在奇数位,而且如果奇数位置摆放好了,那么偶数也摆放好了。所以只需要分别求出奇偶开头的花费数即可。代码:#include<bits/stdc++.h>using namespace std;#define ll long longint t,n,x;int main()

2021-09-26 15:49:23 180

原创 D. The Strongest Build(bfs+优先队列)

题目链接题意:有n个数组,需要在每个数组中选取一个下标,然后将这些选取的下标的数求和,但是有m个下标序列是被禁止的,在不与这些序列相同的前提下,输出一个求和后数字最大的下标序列。思路:用map嵌套vector对下标序列进行标记,然后用bfs进行广搜,每次改变最大序列的一个下标,然后压到优先队列中,以数的总和作为优先队列的第一值,然后每次结束后拿出的vector如果在map中没有出现过,则该序列的答案一定是最大值。代码:#include<bits/stdc++.h>using

2021-09-24 22:43:47 183

原创 P2597 [ZJOI2012]灾难(topsort+LCA)

题目链接题意:给一张图代表食物链,图中没有环,,如果x捕食y,那么有一条有向边,由x指向y,如果某个物种的捕食对象全灭绝了,那么该物种就会灭绝,定义了一个名词“灾难值”,每个物种的灾难值为它灭绝后,会导致多少物种灭绝。输出所有1-n物种的灾难值。思路:如果一个物种有多个捕食对象,那么该物种的所有捕食对象都灭绝了才会使得该物种灭绝,可以知道一个物种捕食对象都灭绝的条件为它所有捕食对象的最近公共祖先灭绝以及能够使得最近公共祖先灭绝的其他物种灭绝,于是可以根据这个条件重新建图,即为将一个物种挂到它所有捕食

2021-09-20 11:02:58 144

原创 AtCoder Beginner Contest 218 F Blocked Roads(并查集+搜索)

题意:给出n个点和m条边,1-m条边会依次不可通过,求出每个边不可通过时,1-n的路径最小值。思路:如果依次求最短路,时间复杂度为m*m*logn,显然是不可以的,于是我想到可以将不受限制时的最短路求出来,那么该路径最长为n个边组成,也就是n-1条边,我们可以将这些边标记起来,然后如果删除的边不是其中的,则直接输出不受限制的答案,否则在某条变不能通过的情况下重新跑一次bfs,时间复杂度为n*m。因为最短路一定在最小生成树中,于是我采用了先生成最小生成树,再标点最短路的方法。代码:#includ

2021-09-12 15:37:41 193

原创 P3761 [TJOI2017]城市

题目链接从加里敦大学城市规划专业毕业的小明来到了一个地区城市规划局工作。这个地区一共有n座城市,n-1条高速公路,保证了任意两运城市之间都可以通过高速公路相互可达,但是通过一条高速公路需要收取一定的交通费用。小明对这个地区深入研究后,觉得这个地区的交通费用太贵。小明想彻底改造这个地区,但是由于上司给他的资源有限,因而小明现在只能对一条高速公路进行改造,改造的方式就是去掉一条高速公路,并且重新修建一条一样的高速公路(即交通费用一样),使得这个地区的两个城市之间的最大交通费用最小(即使得交通费用最...

2021-09-08 18:21:17 114

原创 牛客小白月赛37 I 加减

题目链接思路:枚举l,二分一个r,判断区间内全等于一个值是否满足修改次数小于等于k,因为区间是排序过的,所以只需拿出中位数,然后判断其他数到修改为中位数需要的修改次数是否小于等于k。代码:#include<bits/stdc++.h>using namespace std;#define ll long longll a[100010];ll sum[100010];ll check(int l,int r){ int mid=(l+r)>>1;

2021-09-03 12:53:18 633

原创 E. Carrots for Rabbits(贪心+优先队列)

题目链接题意:给定n个物品,每个物品有一个体积,可以将一个物品拆开成很多份,最后需要一共k份,答案为每个物品的体积的平方总和,输出答案的最小值。思路:我的思路本来为将最大的物体从优先队列里拿出来,然后拆成均等的两份,然后再放回优先队列,交一发wa了,然后发现物品有时候直接拆成三份或更多份会更优,比如10拆成三份为3,3,4,但是如果按照我的方法为2,3,5。看题解发现大佬的做法是先算出不拆的答案,然后将之前不拆的答案和每个物品拆成两份的答案做差,然后每次拿出最大的减去,然后再计算拆多一份的答案压入队

2021-09-01 21:22:27 142

原创 UVA - 1423 Guess(拓扑排序)

题目链接思路:根据sum[j]-sum[i]>0,可以知道j的值比i高,也就是可以连一条j到i的有向边,sum[j]-sum[i]<0,则反过来建边,由此跑拓扑序,排在前面的值一定大于或等于后面的,可以按照入队的顺序给值。代码:#include<bits/stdc++.h>using namespace std;#define ll long longstruct tt{ int x,to;};tt e[20010];int t,n;char p[

2021-08-17 09:12:16 103

原创 E - Good Triple(思维求贡献)

题目链接题意:给一个只包含0和1的字符串S,问在字符串中有多少个区间[L,R]包含S[l]==s[l+k]==s[l+2*k],且L<=l,l+2*k<=R。思路:因为只包含0和1两种字符,可以知道不构成题目条件的串的长度不会大于9,也就是说只需要暴力求解即可,枚举以L为起点,得到满足条件的最小R。答案加上strlen(s)-R+1即可。#include<bits/stdc++.h>using namespace std;#define ll long longc

2021-08-15 12:56:45 143

原创 B - Two chandeliers(扩展中国剩余定理+二分)

题意:有两个灯泡,灯泡都为变色灯,分别有n和m种颜色,每个颜色用ai和bi表示(ai互不相同,bi互不相同),灯每天按照序列顺序更换一次颜色,问多少天之后一共出现过k天两个灯的颜色互不相同。思路:先将每个颜色出现在ai和bi中出现的位置存起来,然后根据扩展中国剩余定理,求相同的颜色第一次相同的位置pos%n==x&&pos%m==y,x和y分别表示该颜色在ai和bi中出现的位置,然后每个颜色下次相同的位置即为pos+lcm(n,m),通过这个可以求出某个位置之前该颜色出现的次数,二分答案

2021-08-13 15:23:49 103

原创 AcWing 3800. 奇数还是偶数(思维)

题目链接给定一个整数nn,它可以被表示为一个k位的b进制数,如下所示:n=a1⋅(b^k−1)+a2⋅(b^k−2)+…+ak−1⋅b+ak举例说明,如果b=17,k=3,a=[11,15,7],那么n=11⋅17^2+15⋅17+7=3179+255+7=3441。思路:1.如果b是偶数,那么a[1]到a[k-1]都是乘以偶数,答案都为偶数,所以只受最后一个a[k]的奇偶数的影响。2.如果b是奇数,那么a[1]到a[k-1]都是乘以奇数,答案不会收到b的影响,仍为a[...

2021-08-11 20:21:57 68

原创 1073. 树的中心(树形dp)

题目链接给定一棵树,树中包含nn个结点(编号1~n)和n−1 条无向边,每条边都有一个权值。请你在树中找到一个点,使得该点到树中其他结点的最远距离最近。思路:既然要找到一个点距离最远的点的距离最近,那么如果以任意点为根节点去dfs,那么某个点距离最远的点一定会被其下面最远的点更新,这个可以通过树形dp直接能到达的最深的深度即可,但是它同时也会被其父节点能到达的最远距离更新,于是我们每个点需要维护一个最大值和次小值和该点的最大值是哪个儿子节点更新的,然后再跑一次dfs,即可得到某个节点的父亲...

2021-08-11 13:20:01 102

原创 P5536 【XR-3】核心城市(树的直径)

题目链接X 国有n座城市,n − 1 条长度为1的道路,每条道路连接两座城市,且任意两座城市都能通过若干条道路相互到达,显然,城市和道路形成了一棵树。X 国国王决定将k座城市钦定为 X 国的核心城市,这k座城市需满足以下两个条件:这k座城市可以通过道路,在不经过其他城市的情况下两两相互到达。 定义某个非核心城市与这k座核心城市的距离为,这座城市与k座核心城市的距离的最小值。那么所有非核心城市中,与核心城市的距离最大的城市,其与核心城市的距离最小。你需要求出这个最小值...

2021-08-10 23:35:33 139

原创 P1395 会议(树的重心)

题目链接有一个村庄居住着n个村民,有n-1 条路径使得这n个村民的家联通,每条路径的长度都为1。现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地点设置在哪个村民的家中,并且这个距离总和最小是多少?若有多个节点都满足条件,则选择节点编号最小的那个点。题意:找到树的重心,然后求所有点到树的重心的距离和。思路:树形dp根据重心的性质找到重心,然后再跑dfs求距离和。#include<bits/stdc++.h>us...

2021-08-09 10:06:31 252

原创 P3398 仓鼠找sugar(LCA)

题目链接小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c)到图书馆(d)。他们都会走最短路径。现在小仓鼠希望知道,有没有可能在某个地方,可以碰到他的基友?小仓鼠那么弱,还要天天被zzq大爷虐,请你快来救救他吧!题意:给出一棵树,给四个点a,b,c,d,问a-b的路径和c-d的路径有没有重合。思路:若两个路径有重合那么一定有LCA(a,b)在c-d路径上或

2021-08-09 09:55:54 184

原创 [USACO19DEC]Milk Visits S(LCA)

题目链接Farmer John 计划建造N个农场,用N-1 条道路连接,构成一棵树(也就是说,所有农场之间都互相可以到达,并且没有环)。每个农场有一头奶牛,品种为更赛牛或荷斯坦牛之一。Farmer John 的M个朋友经常前来拜访他。在朋友i 拜访之时,Farmer John 会与他的朋友沿着从农场 Ai​到农场 Bi​之间的唯一路径行走(可能有 Ai​=Bi​)。除此之外,他们还可以品尝他们经过的路径上任意一头奶牛的牛奶。由于 Farmer John 的朋友们大多数也是农场主,他们...

2021-08-08 14:53:25 210

原创 AcWing 3797. 最大化最短路(图论)

题目链接题意:在k个特殊点之间选两个点,在之间连一条边,使得1-n的最短路最大。每条边的路的长度都为1。思路:从起点和终点出发分别跑一次bfs,求出dist1数组和distn数组,可以知道在a,b两点之间连一条边,最短路可能会不变,也有可能变成dist1[a]+distn[b]+1或者distn[a]+dist1[b]+1,若发生改变,那么最短路的最大值就是min(dist1[a]+distn[b]+1,distn[a]+dist1[b]+1),假设dist1[a]+distn[b]+1小于等于di

2021-08-08 10:11:45 64

原创 3789. 隐藏字符串(dp)

题目链接题意:给定一个由小写字母构成的字符串s。我们称字符串t隐藏于字符串s中,如果它满足:存在一个字符串ss的子序列,与其一一对应。 该子序列的各个元素的下标可以构成一个等差序列。例如,字符串aab就隐藏于字符串aaabb中,因为aaabb的第1,3,5 个元素刚好可以构成aab,而这恰好是一个公差为2的等差数列。字符串tt可能隐藏于字符串s中多次,这取决于共有多少个s的不同子序列满足与字符串t一一对应,且各个元素下标可以构成一个等...

2021-08-01 00:00:18 246

原创 序列最大收益(dp)

题意:给定一个长度为m的整数序列a1,a2,…,am。序列中每个元素的值ai均满足1≤ai≤n。当一个值为i的元素和一个值为j的元素相邻时,可以产生的收益为wi,j。现在,我们可以从序列中删除最多k个元素,删除一些元素后,原本不相邻的元素可能会变得相邻。序列的收益和为所有相邻元素对产生的收益之和,例如一个长度为3的整数序列1,3,2的收益和为w1,3+w3,2。请问,通过利用删除操作,能够得到的序列的最大收益和是多少?思路:设状态为dp[i...

2021-07-29 08:47:39 131

原创 3583. 整数分组 (双指针+dp)

链接题意:给定n个整数a1,a2,…,an。现在,请你从中挑选一些数,并将选出的数进行分组。要求:选出的数最多划分为k组(至少1组)。 同一组内,任意两数之差的绝对值不超过5。 所选出的数尽可能多。请问,最多可以选出多少个数进行分组?代码:#include<bits/stdc++.h>using namespace std;int w[5010];int f[5010][5010];int main(){ int n,m; ...

2021-07-27 10:28:32 86

原创 3780. 构造数组 (单调栈)

题目链接题意:给定一个长度为n的整数数组m1,m2,…,mn。现在,请你构造一个数组a1,a2,…,an。对于构造的数组,有以下三点要求:∀i∈[1,n],1≤ai≤mi 成立。 ∀i∈[1,n], 不存在数对j,k,i 同时满足j<i<k 且aj>ai<ak。 数组中所有元素之和尽可能大。请输出任意合理方案。思路:由题知道,形成的数组一定是只有一个峰的,也就是说只需要选定其中一个点为最大值,两边非递增就可以了,于是可以先用单调栈分别维...

2021-07-25 11:50:08 237

原创 永不言弃 (topsort+优先队列)

题目链接题意:小沙最喜欢打怪升级了,今天他玩了一个游戏,需要从初始关卡开始,击败n个关卡才能通关整个游戏,对于每个关卡都会有两种通过方式。小沙初始的属性值为s,当游戏角色的属性大于关卡最高上限时,可以强行通过该关卡,又或者拥有通过该关卡的必过道具(并不是消耗品)。每个关卡通过后可能会开启一个或多个后置关卡,但每个关卡开启也需要若干个前置关卡,只有前置关卡全部通过后,才能开启该关卡。特别注意,除了一号关卡,如果一个关卡没有任何前置关卡,那么这个关卡则永远无法开启。每个关卡仅能游玩一次,且每个关

2021-07-18 13:19:06 114 1

原创 小L的数列 (最长上升子序列变式)

题目链接题意:小L喜欢数和数列。小L称a1...an​这些数为优秀的。小L称一个序列b1​...bm​为好的当且仅当:1.对于任意的i(1≤i<m),满足 bi<bi+1​。2.对于任意的i(1≤i<m),满足 gcd(bi,bi+1)>1。其中,gcd(x,y)为x 和y 的最大公因数,即最大的d,满足:d∣x且d∣y。3.对于任意的i(1≤i≤m),bi这个数是优秀的。现在,小L想知道最长的能称为好的的序列的长度是多少,容易证明这个长度是有穷的。思路:​​...

2021-07-15 19:32:05 243

原创 小G的LY数对 (手写hash表)

题目链接题意:小G定义LY数对为两个数x,y在二进制的异或操作后恰好有两位是1小G现在有两个数组a,b长度分别为n,m现在小G想知道有多少对i,j满足(1<=i<=n,1<=j<=m)满足a[i]和b[j]是LY数对思路:既然需要有两位不一样,那么改变a的一位如果与改变了一位的b相同,说明它们为其中一对,但是如果a与b直接相等我们不能计入答案,所以需要删除出来。代码:#include<bits/stdc++.h>using namespace

2021-07-15 15:28:01 109

原创 3760. 最大剩余油量 (树形dp)

题目链接题意:一个国家由nn个城市组成,这n个城市由n−1 条双向道路连接,呈一个树形结构。每个城市都设有加油站,在第ii个城市可以购买wi 升汽油。汽车在道路上行驶,毫无疑问也会消耗汽油,每条道路的具体耗油量也会给出。现在,需要制定一条汽车的行进路线,从任意城市s出发,经过一条简单路径,到达任意城市e结束。注意,行进路线也可以只包含一个城市(也就是哪都没去)。汽车初始时油箱是空的,但是可以在路线中经过的每个城市购买汽油,包括开始城市和最终城市。如果在...

2021-07-13 18:43:27 80

原创 B 计算几何(数位dp)

问题链接由于小L追女孩子的时间不多了,于是这里只有简单版题意。共有T组询问,每次给定l,r,你需要求出在[l,r] 中有多少个数在二进制下1的个数有奇数个。例如4=(100)2,在二进制下有1个1,那么如果l=r=4,答案为1。例如5=(101)2​,在二进制下有2 个 1,那么如果l=r=5 ,答案为0。思路:将每个数用二进制分解,然后数位dp得到0到L-1的奇数个1的数的个数,以及0到R的奇数个1的数的个数。做减法输出即可。代码:...

2021-07-08 12:25:28 70

原创 D 作弊(哈夫曼树)

题意:采用摇头和点头表示字母,使得多个字母同时表示时不会产生错误,问某个串在这个前提下表示出来需要的最少动作。思路:由于每个字母需要能够识别,可以构造一棵树,每个变代表点头或者摇头,然后每个字母为叶子节点,这样就可以使得每个数都不同,然后采用哈夫曼树的建树方法,出现次数少的字母离根节点远一些一定是最优的。代码:#include<bits/stdc++.h>using namespace std;#define ll long longstring str;priority_

2021-07-07 12:35:29 67

原创 数学家的迷题(bitset+线段树)

题意:给一个序列,共有两个操作。1.可以修改某个位置的值为x。2.给一个区间l,r,T=a[l]×a[l+1]×...×a[r−1]×a[r],问T有多少个质因子。思路:多个数相乘的答案的质因子个数为每个数字的质因子存入集合去重后的个数。因为需要对每个数的质因子进行去重和存储,可以用bitset存储质因子,然后做与运算即可,但是由于空间限制,我们应先将小于1e5的质因子求出来,然后直接处理,由于求出来后直接for循环分解也会超时,需要优化成直接找到最小质因子的方式,然后建立线段树进行单点修改和区

2021-07-07 09:33:50 138

原创 寻找字符串的最小表示法

时间复杂度为O(n),只需要用两个指针遍历一次字符即可找到。(最小表示法即为将字符串首位相接,然后每个点都可作为头,找字典序最小的那个)#include<bits/stdc++.h>using namespace std;const int maxn=2000010;string str1,str2;int n;int find(string str){ int i=0,j=1; while(i<=n&&j<=n){ i

2021-07-07 09:19:36 191

原创 C 哲学家的沉思 (倍增)

题目链接题意:给一个序列ai,q次询问,每次给出一个l和r,问区间l,r最少分成几段能够使得a[Li]是Li到Ri之间的最大值。思路:维护一个当前点能够到达的最远距离+1,然后倍增维护一下,查询时只需要倍增求出最小值即可。代码:#include<bits/stdc++.h>using namespace std;#define ll long longint a[100100];int f[100100][25];int main(){ int n,qq;

2021-07-06 15:12:48 118

原创 牛客练习赛85 B 音乐家的曲调(尺取法)

题目链接题意:在字符串中寻找三个字串,使得它们三个串的长度最大,每个串需要满足同一字符出现的次数不大于m次。思路:简单尺取法选取的是单一长度最大,且同一字符出现次数不大于m次。由于需要选取三段,我们可以先预处理一个前缀满足条件的最大长度以及后缀满足条件的最大的长度,然后最后再跑一次整个串,取一个max(L[l-1]+R[r+1]+(r-l+1)即可。代码:#include <bits/stdc++.h>using namespace std;#define ll long

2021-07-06 09:41:22 64

原创 牛客IOI周赛27-普及组 D 旅游(简单floyd)

题目链接题意:从s点开始游玩,由于疫情,游玩的景点必须经过消毒,且经过的路径的每个点都必须经过消毒。可以游玩则输出最短花费,否则输出-1。思路:由于经过的点必须经过消毒,即可以考虑只对消毒过的点进行放缩,用以维护最短路,然后判断终点是否消毒和能否到达即可。代码:#include<bits/stdc++.h>using namespace std;#define ll long longll dp[310][310];int n;void floyd(int x){

2021-07-05 12:07:52 125

原创 长沙学院2022蓝桥杯选拔赛第一场

A.楼下是签到题题解链接B.新物种思路:需要考虑三种情况,第一种为本身要走的长度小于2H,那么要走的路程为2H,第二种情况为本身要走的距离大于2H且模H不为0,那么需要走实际距离/H+1个H,第三种情况为本身要走的距离模H为0,直接输出1,因为两个距离相等。代码:#include<bits/stdc++.h>using namespace std;int main(){ int t; scanf("%d",&t); while(t--)

2021-06-27 10:42:32 472 1

原创 一起来做题~欢乐赛1

A 学 群 代 主 变 A 能 一题意:找到一个C使得有尽可能多个a[i]满足 1≤j≤m ∣c−a[i]∣<∣c−b[j]∣,输出最多的ai个数。思路:既然需要使得ai到C点距离小于bj到C点距离,那么我们只需要对b数组进行排序,查询在每个b[i]和b[i-1]中有多少个a[i],取最大值即为答案,因为只有在两个数之间找点才可满足式子。(有特例即为0到b[1]之间和b[m]到最大值之间可以取a[i]。)代码:#include<bits/stdc++.h>using n

2021-06-26 13:58:20 55

原创 C - Tricolor Pyramid(卢卡斯定理)

题目链接题目:堆成yi'ge

2021-05-30 13:42:52 159

原创 长沙学院第一届“360湖南网安基地杯”程序设计竞赛

A.时间间隔思路:直接算出两个日期为当年第几天,然后输出答案两个日期相减的绝对值即可。#include<iostream>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;#define N 1010int n;int a[2],b[2];int date1[12] = {31,28,31,30,31,30,31,31,30,31,30,3

2021-05-29 18:03:37 533 2

原创 状态机专题

AcWing 1049 大盗阿福

2021-05-28 10:27:52 110

原创 牛客练习赛83 ABCE题

A. 追求女神题目链接思路:因为人需要在固定的时间到达某个点,故当前位置到下一个位置最短所需时间加上当前时间若大于给出时间,则不可能达到目的,且因为人不可以站在原位置不动,如果给出时间大于最短所需时间,则人需要来回走动来消耗时间,每次走出当前点再回到当前的时间差一定为偶数,故若给定时间-当前时间得到的时间差的奇偶性和最短所需时间的奇偶性相同则可以达到目的,否则不能够达到。#include <bits/stdc++.h>using namespace std;#define ll lon

2021-05-21 23:27:54 224

原创 C. Sequence Pair Weight(组合计数)

题目链接题意:给一个长度为n的序列,问所有的字串的贡献总和为多少?若ai==ajai==ajai==aj,且i!=ji!=ji!=j,该子串的贡献加1。例:41 2 1 1的贡献总和为6。[1,2] having 0 valid unordered pairs;[2,1] having 0 valid unordered pairs;[1,1] having 1 valid unordered pair;[1,2,1] having 1 valid unordered pairs;[2,

2021-05-21 10:20:05 339

原创 B - DNA Sequence(思维)

题目链接题意:给你一个串,A和T匹配,G和C匹配,问有多少个子串可以通过重排列和原来的子串匹配。思路:只需子串里的A的数量等于T的数量,C的数量等于G的数量,那么串通过重新排列就可以和原来的串匹配。如何判断某个区间的A和T数量是否相等,可以将A的值定为1,T的值定为-1。当某个前缀和为0的时候说明数量相等,且当某个前缀减去另一个前缀的值为0的时候,该段区间内的数量也相等。#include<bits/stdc++.h>using namespace std;#define ll long

2021-05-20 08:04:37 104

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除