![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
训练
想出成果的acmer
当你越来越漂亮的时候,自然有人关注你,当你越来越有能力时,自然会有人看得起你,改变自己,你才有自信,梦想会慢慢的实现,要做好你自己,懒惰可以毁掉一个人,勤奋可以激发一个人,不要等到夕阳西下的时候才对自己说如果当初…如果…我就会怎么样,之类的话,都已经晚了,我只想告诉你一句话:要做一个连自己都羡慕的人!
展开
-
2020ICPC澳门站 F(构的并不是很造)
题目题意: 给定n个点,每个点有d条有向边,要求构造出c个连通块。思路:时间复杂度: O(nd*log(nd))代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5+10;int n,m,k,T;int d,c;int a[N];void solve(){ scanf("%d%d%d",&n,&d,&c); ll t =原创 2022-03-31 21:08:43 · 391 阅读 · 0 评论 -
2021南京站 H(树形dp,典中典之不特判)
题目题意: 给定n个点的树,每个点上有蝴蝶数量a[i],到达一个点i后,所有相邻点j会在对应的t[j]内消散。(t<=3)求从点1出发最多可以获得多少蝴蝶。思路: 树形dp.时间复杂度: O(n)代码:// Problem: H. Crystalfly// Contest: Codeforces - The 2021 ICPC Asia Nanjing Regional Contest (XXII Open Cup, Grand Prix of Nanjing)// URL: htt原创 2022-03-29 21:17:06 · 530 阅读 · 0 评论 -
2022省赛选拔 D(单调栈)
题目题意: 给定长度为n的数组,可以执行任意次operation,最后输出字典序最小的数组。operation: 选定数组任意子区间,让每个数变成该区间的平均值。思路: 一种朴素的想法是迭代,如果一个序列是非递减的,取平均不会更优。所以每遇到严格递减的序列,就取平均。之后一直迭代。但是这种做法有点暴力,会被卡掉。更优秀的做法是二分或者单调栈。单调栈始终维护一个上升序列,当新遇到的元素小于栈顶时,就一直弹栈,并将两块数合并变成平均值,直到变为单调不减的序列。时间复杂度: O(n)代码://原创 2022-03-29 14:55:49 · 126 阅读 · 0 评论 -
QDU2022省赛选拔 B
题目题意: 给定长度为n的数组,判断能否在其中找到四个数,使得和为0.(n<=1000)思路: 可以暴力,直接枚举三个数+哈希判断,再配上一些剪枝就过了,不加剪枝会MLE。。。。我感觉这个时间复杂度还挺高的,但是确实能过。因为是n*(n-1)*(n-2)/6,大约是1.5e8的。还有两种方法,不用哈希,哈希常数会大一些。将数组排序,然后枚举两个数,第三层用双指针找是否存在另外两个数,n*(n-1)*(n-2)/6. 没有哈希的常数将任意两数之和形成一个新数,并且记录一下这个数是原数组哪两个数原创 2022-03-29 10:45:10 · 1151 阅读 · 0 评论 -
2022省赛选拔 J(最短路)
题目题意: 给定nn的矩阵,为floyd算法的结果,任意两点之间的最短路。之后依次添加m条边(存在重边但是没有自环),每加一条边,输出当前图中任意两点之间的最短路之和。(n,m<=300)思路: 每添加一条边t,如果他小于当前x、y之间的最短路,枚举起点和终点,如果通过边t可以变得更短,就更新这个最短距离。之后求一下累加和即可。时间复杂度: O(nn*m)代码:// Problem: C. Roads in Berland// Contest: Codeforces - Codeforc原创 2022-03-28 21:10:47 · 189 阅读 · 0 评论 -
2021qdu省赛选拔 J(贪心都不会QAQ)
题目题意: 给定n张代金券,每张代金券为一个区间[l,r],duration即区间大小,r - l + 1,花费为w。找到两张区间不相交的代金券,满足duration之和恰好为m,花费之和最小。输出最小花费或判定无解。思路: 将每个区间的两个端点都进数组按照大小排序。而且这里有个小trick,大小相等优先排左端点。这样右端点制造的满足条件的最小值会在左端点计算之前,事实也是如此,因为他俩是相交的。用数组f维护当前已经遍历完的区间的最小值,f[2] = 1说明前边有区间长度为2,最小花费为1。当遍历到原创 2022-03-27 16:07:40 · 226 阅读 · 0 评论 -
2021qdu省赛选拔2 E(什么dp)
题目题意: 任何正整数都可以分解为若干个2的幂次之和。求n的分解方案。(n<=1e6)思路: 观察奇数x的方案和x-1一样,因为它只能在此基础上+1,方案数一样的。偶数dp[x] = dp[x-1] + dp[x/2].这个确实没想到,首先是-1的方案+1即可,这个是所有含1的方案,因为奇数的方案里必然有1。x/2的方案数,所有数都*2,可以凑出x,它是所有不含1的方案。太妙了QAQ时间复杂度: O(n)代码:#include<bits/stdc++.h>using na原创 2022-03-26 22:11:38 · 218 阅读 · 0 评论 -
2021qdu省赛选拔 D
题目题意: 给定n个点,m条边,构造一个满足如下条件的树。必须满足最大的边尽可能小,在此基础上,使得所有边的边权和尽可能地大。思路: 二分(bushi)。可以先跑一遍最小生成树,其中的最大边一定满足第一个条件,没法找到最少的了。然后用所有<=mx的边再建一棵最大生成树即可。时间复杂度: O(mlogm)代码:#include<bits/stdc++.h>using namespace std;const int N = 1e5+10;typedef long long l原创 2022-03-26 22:06:57 · 479 阅读 · 0 评论 -
poj1724(dfs || Dij(reform to bfs))
题目题意: 给定有向图,求从1到n的最短路。附加了第二边权,钱。要求求得的最短路为使用钱数不超过limit的最短路. n = 100,m = 10000思路: n很小,直接dfs搜索满足条件的路径。或者用Dijkstra,但是与传统的用法不同。只要满足使用钱数<=limit的,就放入队列。也不必进行懒惰删除和dist数组更新,因为贪心性质朝最短路方向努力,可能导致钱超出limit,而相对较长的路可以保证钱数<=limit.(这样其实和bfs一样了)时间复杂度: O(n+m)?代码:#原创 2022-02-17 11:38:04 · 107 阅读 · 0 评论 -
黑暗爆炸 - 1293 尺取学的不是很行
题目题意: 在一维数轴上有n个点,m种颜色的球。每种球出现在一个点上,一个点上可能有多个球。现在,用一条绳子绑在两点,使得两点之间能够凑够m种颜色,求绳子最短为多长。思路: 刚开始想的二分加nlogn时间check,还MLE了,经典乱写。后来想想直接尺取就好了.时间复杂度: O(n)代码:#include<iostream>#include<cstdio>#include<algorithm>#include<complex>#include原创 2022-02-16 22:57:15 · 123 阅读 · 0 评论 -
51Nod - 1276 (离线、思维)
题目题意: 给定n个小岛,彼此相邻的小岛会成为一个大岛。当时间为t时,所有高度<=t的小岛会被淹没,剩余的岛自行组成大岛。q次询问,询问时间为ti时的大岛数量、思路: 对询问从小到大排序,离线处理。小岛也从小到大排序。 对于每个即将被淹没的小岛:如果它的左右两侧早已被淹没,孤军奋战,cnt–.如果左右两侧都没有被淹没,隔离,cnt++.否则不影响数量。时间复杂度: O(nlogn)代码:#include<iostream>#include<cstdio>原创 2022-02-16 22:44:26 · 237 阅读 · 0 评论 -
Count Color(线段树经典题目)
题目题意: 给定n个花瓶,每个花瓶的颜色为1-k,有m次操作。(1<=k<=30)操作1: 使[l,r]中的花瓶颜色变为x操作2: 查询[l,r]中花瓶的颜色总数思路: 观察到k才30,可以用二进制表示区间的颜色,最大2^31-1,不会爆int。之后就是线段树板子。但是区间修改我忘了打懒标记,太lao了,只能说明当时就没学明白。有空补一手基础知识。时间复杂度: O(mlogn)代码:#include<iostream>#include<cstdio>#i原创 2022-01-29 12:06:18 · 122 阅读 · 0 评论 -
1100. 抓住那头牛(在atcoder犯的错又来一次,梅开二度)
题目题意: 给定整数n,目标数m。(0 <= n,m <= 1e5)操作1: n–或n++操作2:n * 2求最少多少次操作。(可以证明一定有解)思路: bfs。若m < n,只能通过减法得到,直接出结果。否则bfs搜索。有可能是乘2之后减1得到结果,所以搜索范围不能局限于<=m,应该局限在1e5以内。上次atcoder也犯了类似的错误,还就内个梅开二度。时间复杂度: O(1e5)代码:#include<iostream>#include<cst原创 2022-01-29 12:00:59 · 310 阅读 · 0 评论 -
AcWing 131. 直方图中最大的矩形【单调栈】
题目题意: 给定n个高度为ai,宽度为1的矩形,求出其中最大面积的矩形。思路: 先考虑暴力,枚举每个高度的矩形分别向左右扩展。时间复杂度不能接受。发现如果有形如3 2这样的矩形排布,只需要记录下2即可。因为2决定了左侧矩形高度不能超过2,而且高度小于等于2的矩形在左侧都能接受。 因此,可以用单调栈维护一个高度的单调递增栈。时间复杂度: O(n)代码:// Problem: 直方图中最大的矩形// Contest: AcWing// URL: https://www.acwing.com/p原创 2022-01-27 11:46:27 · 218 阅读 · 0 评论 -
AcWing 141. 周期 (KMP理解)
根据前后缀相等,循环节长度len = i - ne[i]. 当 i % len == 0,最多有 i / len次循环。题目思路: 求出next数组,根据引理每个位置依次判断.#include<cstdio>#include<iostream>using namespace std;const int M = 1e6+10;int n,m,k,T;int cas = 1;char s[M];int ne[M];void solve(){ while..原创 2022-01-27 10:19:05 · 496 阅读 · 0 评论 -
2021牛客多校第二场-K
**题意:**给定一个permutation。你有一个栈,每个数都要按照栈的判断方式进行入栈.若x大于等于栈顶,直接入栈。否则,一直弹栈。给定b数组,bid表示第id个数入栈后,栈的大小。构造一个序列,满足该b数组。若不能构造,输出-1.思路: 树状数组+二分.时间复杂度: O(nlogn)分析: 首先对b进行初始化,按照理论最大值赋值。没给定的b的值,b[i]最大就是b[i-1]+1,如果b[i] > b[i-1] + 1,说明不能构造。每次通过二分找到当前还没用过的第b[i]小的,就会保持栈原创 2021-09-23 08:44:16 · 60 阅读 · 0 评论 -
2021 航电压力测试赛 City(最大生成树?)
题目题意:给定n个点,m条无向边,连通图。m次询问,每次询问,给定一个数p,把所有小于p的边删除,问此时有多少对顶点连通。思路:原创 2021-09-05 09:05:05 · 89 阅读 · 0 评论 -
abc-217 D - Cutting Woods (set+lower_bound动态维护上升序列)
题目题意:给定长度为L的绳子,绳子上有n-1个点,分别在0,1,2…L-1位置。进行m次操作。1:把绳子从x处切开,多一截。2:询问x所在那一截的绳子有多长。思路:查询x前后的切开的位置,做差,即可得到长度。代码// Problem: D - Cutting Woods// Contest: AtCoder - AtCoder Beginner Contest 217// URL: https://atcoder.jp/contests/abc217/tasks/abc217_d// Me原创 2021-09-04 22:42:15 · 252 阅读 · 0 评论 -
2021CCPC网络赛第一场 1002 Time-division Multiplexing
比赛的时候连题意都没看懂,雀氏菜。题目题意理解以后,就转换成了求一个字符串s中包含涵盖指定字母集的最短子串的长度的题。比如在abbcde中求abc的最短子串,abbc。首先求出最小公倍数,然后通过输入的字符串求出字符串s。他是一个无限循环的字符串的循环节。所以要求最短只要两个s拼接在一起,就转变成了上述问题。上述问题可以采用双指针解决。l = 0,r = 0.r右移,直到合法。l左移,直到不合法。在过程中维护r-l的最小值即可。代码#include<iostream>#in原创 2021-09-02 18:29:50 · 165 阅读 · 0 评论 -
牛客练习赛87 - B(写给自己)
B题目: 给定一个permutation,求有多少个区间满足区间长度>=k,且第k小的数是x.比赛的时候没有用心去观察,只是注意到和每两个比x小的数的位置有关系,想到差分,但是没写出来。赛后又观摩了带lao的思路。思路1:观察到和区间端点所在位置有多少个数小于x有关,利用前缀和的思想。s[i]表示从1-i中有t个数小于x,如果一个区间有k-1个数比x小,那么x就是第k小。因此满足s[r] - s[l-1] = k-1的区间第k小的数是x,前提的包含x。接下来我们可以把<x的变成1,>原创 2021-08-22 13:40:51 · 76 阅读 · 0 评论 -
2021-08-19,20级限时训练
CF987E 思维题没有思路,经典不会就搜,坏习惯。可以发现3n 和 7n+1奇偶性不同,就从这里下手。思路: 假设最终的序列中逆序对数量为k.每次交换都会使逆序对+1或者-1,假设+1数量为x,-1数量为y.对于3n的操作。x + y = 3n, x - y = k.所以2x = 3n + k. 所以3n 和 k同奇或同偶。所以判断一下逆序对个数和3*n的奇偶性即可。20级带lao写了O(n)的做法,与permutation性质有关,tql,我不会,只会树状数组。// Prob原创 2021-08-19 23:46:58 · 71 阅读 · 0 评论