- 博客(142)
- 收藏
- 关注
原创 K. 子串翻转回文串
公式:get(l,r) - get(l,i)*p[r -i] + get2(l,i)*p[r-i] 其中 p[r - i ]是 进行了 p倍。我们只需要找到不对称的那一部分在进行每一位反转,这时候我们可以用 O(1)的时间复杂度进行优化。,你可以选定其一个非空子串,然后将该子串翻转。具体来说,若选定的子串区间为 [是回文串,当且仅当它从左至右读出与从右至左读出完全相同,即。请你回答仅通过一次上述操作后,时间复杂度为:O(n);),则翻转后该串变为。
2024-05-06 19:05:15 309
原创 2023ccpc深圳G题相似基因序列问题
这时我们可以 h[i] = (ll)(h[i-1]*p) + c,先转long long 类型,避免溢出,在进行mod答案是不会错的。这时候我们可以利用hash函数进行处理,对比一个字符串的小于为O(1)如果是用暴力的话是 300*300*6000,这样子一定会超时。这里的哈希函数创建,我调试的2小时。如果用int类型时,mod = 1e9+7;重点:用二分进行优化,在到不一样的那个字符。时间复杂度为:O(n*long(m)* k)在进行二分答案搜索不同字符串的关系。这样子可以节省空间复杂度。
2024-05-06 18:59:52 341
原创 AtCoder Beginner Contest 352(补题)E
给你一个加权无向图 𝐺G ,其中有 𝑁N 个顶点,编号为 11 至 𝑁N。执行所有 𝑀M 操作后,确定 𝐺G 是否相连。如果是,求 𝐺G 最小生成树中各条边的总重。当在这次搞作,存在有2个不同的父节点,这时,我们将这连个节点连起来,相当于这两个集合联通。对每次搞作,我们可以用并查集对 其操作中的每个点,进行求并查集求它的父节点。每次操作给定 这个操作有 k个点 和 这k个点两两的边为 c。可是这又m个操作,我们可以队这 m个操作进行排序;特判如果存在不止1个集合,返回-1。就是给定n个点,和m次操作 ,
2024-05-05 13:44:10 453
原创 [AGC006D] Median Pyramid Hard
第 N 层有一个 1 到 2N−1 的排列,其他层的数字按以下规则生成:方格 b 中填写的整数,是方格 b 正下方、左下方和右下方方格中所写整数的中位数。我们画图可以知道当越接近中间时,相邻的两 个 1 或者 2 个 0被使用的次数最多,且最不容易被帖边的数删除掉。从数组的中间先两边遍历,如果 有两 个 连续的 1 时,这时候猜的数 是小 的,二分向右端点靠近。用 0 1 来代表: 如果 为 1 ,则 比猜的数 大 ,否者比猜的数小。给出一个 N 层的方格金字塔,自顶向下依次标号为第 1 到第 N 层。
2024-04-12 16:51:29 365
原创 P1712 [NOI2016] 区间(线段树 + 贪心 + 双指针)
换句话说,就是使得存在一个 x ,使得对于每一个被选中的区间 [li,ri],都有 li≤x≤ri。第 2 到第(n+1) 行,每行两个整数表示一个区间,第 (i+1) 行的整数 li,ri 分别代表第 i 个区间的左右端点。区间[li,ri] 的长度定义为 (ri−li) ,即等于它的右端点的值减去左端点的值。在数轴上有 n 个闭区间从 1 至 n 编号,第 i 个闭区间为 [li,ri]。对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的最短区间长度。
2024-04-12 14:40:43 354
原创 P1843 奶牛晒衣服
一件衣服在自然条件下用一秒的时间可以晒干 a 点湿度。使用用一秒烘衣机可以让一件衣服额外烘干 b 点湿度(一秒晒干 a+b 湿度),但在同一时间内只能烘一件衣服。现在有 n 件衣服,第 i 衣服的湿度为 wi(保证互不相同),要你求出弄干所有衣服的最少时间(湿度为 0 为干 )。但是由于衣服很湿,为牛宝宝晒衣服就成了很不爽的事情。于是,熊大妈请你(奶牛)帮助她完成这个重任。我们贪心,每次烘干其时间最长的衣服。第一行三个整数,分别为 n,a,b。一行,弄干所有衣服的最少时间。猜时间,对时间进行验证;
2024-04-11 23:03:18 393
原创 P1209 [USACO1.3] 修理牛棚 Barn Repair
他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板。给出m,s,c,表示木板最大的数目、牛棚的总数、牛的总数;以及每头牛所在牛棚的编号,请算出拦住所有有牛的牛棚所需木板的最小总长度。在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶、门被吹飞了 好在许多牛正在度假,所以牛棚没有住满。有些牛棚里有牛,有些没有。所有的牛棚有相同的宽度。接下来 c 行,每行包含一个整数,表示牛所占的牛棚的编号。当牛棚数大于木板数,我们需要把断距离的合并在一起。时间复杂度为:O(n);
2024-04-11 22:35:50 367
原创 子数组 OR/AND/GCD 模板(补题)
反过来 我们可以假定区间的右端点,对区间 or运算的 左端点 进行更新。在本题暴力的做法是 定左区间,搜索右区间。在or是只可以变大。的长度,如果特别子数组不存在,那么返回。时间复杂度 为 :O(n* 数组长度)不存在以 7 作为最大公因数的子数组。如果一个数组中所有元素的按位或运算。是能整除数组中所有元素的最大整数。首先nums[i] 要可以被k整除。的子数组中元素的最大公因数等于。是数组中一个连续的非空序列。这一题和上一题也是十分的相似。,那么我们称这个数组是。这样子就缩小的区间。
2024-04-04 17:40:53 429
原创 P4777 【模板】扩展中国剩余定理(EXCRT)
对于 100% 的数据,1≤n≤105,1≤bi,ai≤1012,保证所有 ai 的最小公倍数不超过 10181018。这时我们可以利用扩展的欧拉定理求解 特解 :q1 = p * (r2 - r1) /gcd(a,b)a*q1 + r1 = b* q2 + r2 移项可得 a*q1 + b*q2 = r2 - r1。当mi他们两两不互质的时候,x = a*q1 + r1 , x = b*q1 + r2;并对其求通解: P = q1 + b / gcd(a ,b )*K (K为任意常数)
2024-04-03 15:46:29 321
原创 P3369 【模板】普通平衡树(splay 算法)
比如:x右旋,x的右儿子为y,这时原本的x的右儿子就要当y的左儿子。第一行为 n,表示操作的个数,下面 n 行每行有两个数 opt 和 x,opt 表示操作的序号(1≤opt≤6)我们找到它的前驱和后继,再进行把删除的点移到其后继的左儿子上,再进行删除操作。我们自己构造平衡二叉树,左儿子节点小于父节点,右儿子的全部节点大于父节点。而且x为y的左儿子,x的任意一个儿子一定小于其x的父节点。当直线型时,先旋转它的父节点,在旋转它自己本身。在遍历它的左儿子的右儿子。右旋时:x的右儿子当作y的左儿子。
2024-03-28 10:46:50 833
原创 P3901 数列找不同 (两种做法 树状数组 和 dp记录其左端点的 最大 值 )
现有数列 1,2,…,A1,A2,…,AN,Q 个询问(Li,Ri),询问 ALi,ALi+1,…,ARi 是否互不相同。对于 100% 的数据,1≤N,Q≤105,1≤Ai≤N,1≤Li≤Ri≤N。树状数组是求区间的和。判断区间的和 与 区间的大小一样,则没有重复的数组。第二行,N 个整数A1,A2,…接下来 Q 行,每行两个整数 Li,Ri。对于 50% 的数据,N,Q≤103。时间复杂度为:O(n*logn)第一行,两个整数N,Q。时间复杂度为:O(n)
2024-03-26 15:59:30 282
原创 P1972 [SDOI2009] HH的项链(可持续化线段树)
HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?于是,他只好求助睿智的你,来解决这个问题。用 一个 rt记录其删掉上次重复的 个数,在赋值到 当前 第 i棵 线段树上。第二行 n 个正整数 ai,表示项链中第 i 个贝壳的种类。接下来 m 行,每行两个整数 l,r,表示询问的区间。输出 m 行,每行一个整数,依次表示询问对应的答案。
2024-03-26 15:20:49 308
原创 P1972 [SDOI2009] HH的项链(线段树+离线做法+排序)
HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?用 vector v [N ] 记录 的当右端点为 i的 情况下,存储它的第几次询问的小标。用线段树进行上次它前面出现的相同的数,并且记录前面出现的最后一次的下角标。接下来 m 行,每行两个整数 l,r,表示询问的区间。输出 m 行,每行一个整数,依次表示询问对应的答案。
2024-03-26 14:57:46 430 1
原创 P1383 高级打字机(可持续化线段树)
早苗入手了最新的高级打字机。最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧。用可持续化线段树,每次操作的区间的最后一个没有记录的为1个区间。以下 n 行,每行一个命令。保证输入的命令合法。每行输出一个字母,表示 Query 操作的答案。第 11 行:一个整数 n,表示操作数量。时间复杂度为:O(n*longn)文章一开始可以视为空串。
2024-03-26 12:03:00 181
原创 P3834 【模板】可持久化线段树 2
如题,给定 n 个整数构成的序列 a,将对于指定的闭区间 [l,r] 查询其区间内的第 k 小值。接下来 m 行每行包含三个整数 l,r,k , 表示查询区间[l,r] 内的第 k 小值。第二行包含 n 个整数,第 i 个整数表示序列的第 i 个元素 ai。2.记录每个历史版本区间节点的个数。判断是否 进入左区间还是右区间。第一行包含两个整数,分别表示序列的长度 n 和查询的个数 m。我们前一篇写了可持续化线段树,我们只需对其进行修改一下即可。对于每次询问,输出一行一个整数表示答案。
2024-03-26 11:23:28 268
原创 P3919 【模板】可持久化线段树 1(可持久化数组)
对于操作1,格式为vi 1 loci valuei,即为在版本vi的基础上,将 loci 修改为 valuei。答:线段树是以区间进行搜索递归,只有当左区间等于右区间是,l==r是才可以被赋值,其他时候一般求个数和区间和或区间的最大值。第二行包含N个整数,依次为初始状态下数组各位的值(依次为 ai,1≤i≤N)。并对他进行访问它的左右儿子的节点,将上一版本的左右儿子暂存在当前父节点上。输入的第一行包含两个正整数 N,M, 分别表示数组的长度和操作的个数。访问某个历史版本上的某一位置的值。
2024-03-26 10:57:00 904
原创 100268. 最长公共后缀查询(字典树查询)
中有两个或者更多字符串有最长公共后缀,那么答案为长度。我们可以倒着建立一颗字典树,并对他进行记录。如果有超过两个字符串有。最短长度,那么答案为它们在。请你返回一个整数数组。时间复杂度:O(n)
2024-03-24 12:34:36 368
原创 F. Microcycle(dfs 搜寻路径 + 并查集)
我们可以利用并查集,进行确定其是否有环路。在将所用的边从大到小排序。利用 vector容器,pop_back() 和 push的特性。本题的意思是,求一个环的最小的那条边。起点为 u终点为 v寻找路径。并且输出其这个环的点。
2024-03-19 10:38:28 237
原创 【G. One-Dimensional Puzzle (组合数学+逆元)
我们可以 当1 比 2 大一个时,有 a个1 c个 2 时,有 a个位置可以放3个,a个 位置可以放 4的。对于第一种第二种3的个数和4个个数在不考虑的情况下。使用a-1个隔板,进行隔开,刚好就是 a个位置。当时a为位置有区别的,但是放进去的3没有区别的。当 1 和2 相差个数超过 1时,答案为 0;往a个有区别的盒子当中放入c个无区别的小球。n+m小球 有 n+m-1个空隙。第二种: 4 4 4 4。第一种:3 3 3 3。第三种:1 2 1 2。第四种:1 3 3 2。第五种:2 4 4 1。
2024-03-19 09:55:46 205
原创 E. Collapsing Strings
我们需要求的每个字符串对应的reverse,在进行字典树的建立,记录其它的 每个连续字字符串的 个数。
2024-03-19 09:26:22 405
原创 G16 种苹果
最近流行种苹果的游戏,玩家种下一颗苹果树,初始成长值为0,每次浇水都会增加成长值,当成长值大于等于V时,就可以收获成熟的苹果了。玩家拥有五种颜色(红色、黄色、蓝色、绿色、紫色)的水壶若干个,每浇水一次就消耗一个水壶,不同颜色的水壶水量不一定一样,因此用不同颜色的水壶浇水苹果树获得的成长值也可能不一样。苹果成熟后剩余水壶中的水量仍然可以继续在下一局游戏中继续使用,因此,玩家想用最少的水量让苹果成熟,最大程度节约水量。请你帮他计算下苹果成熟的最少浇水量。
2024-03-18 21:37:25 244
原创 P1407 [国家集训队] 稳定婚姻(tarjan算法 强联通分量)
若某男 Bi 与某女 Gj 曾经交往过(无论是大学,高中,亦或是幼儿园阶段,i≤j),则当某方与其配偶(即 Bi 与 Gi 或 Bj 与 Gj)感情出现问题时,他们有私奔的可能性。对于 100% 的数据,所有姓名字符串中只包含英文大小写字母,大小写敏感,长度不大于 8,保证每对关系只在输入文件中出现一次,输入文件的最后 m 行不会出现未在之前出现过的姓名,这 2n 个人的姓名各不相同,1≤n≤4000,0≤m≤20000。对于 40% 的数据,n≤100,m≤400;
2024-03-18 21:23:29 428
原创 P1514 [NOIP2010 提高组] 引水入城
故一座城市能建造输水站的前提,是存在比它海拔更高且拥有公共边的相邻城市,已经建有水利设施。由于第 N 行的城市靠近沙漠,是该国的干旱区,所以要求其中的每座城市都建有水利设施。在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个 N 行 M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。如果不能满足要求,输出的第一行是整数 0,第二行是一个整数,代表有几座干旱区中的城市不可能建有水利设施。水利设施有两种,分别为蓄水厂和输水站。
2024-03-18 21:06:12 272
原创 P1266 速度限制(最短路 迪杰斯特拉算法)
每条道路是有向的,只连接了两条道路,并且最多只有一块限速标志,位于路的起点。在这个繁忙的社会中,我们往往不再去选择最短的道路,而是选择最快的路线。不幸的是,有一些限速的标志丢失了,因此你无法得知应该开多快。接下来的 M 行,每行描述一条道路,每行有 4 个整数 A (0≤A
2024-03-18 20:42:19 458
原创 Checkout Assistant
接下来 n 行每行每件商品由一对数 ti,ci(0≤ti≤2000,1≤ci≤109)描述。当收银员正在扫描某件商品时,Bob 可以从他的手推车中偷走某些其它商品。每件商品由它的价格 ci 和收银员扫描它的时间 ti 秒定义。其时间 的最大值应该为 max(time) = v + n ,v代表物品扫描的最多花费的那个时间,n为共有多少件物品。状态转移方程:dp[j] = min(dp[j] , dp[j - t[i]] + c[i] );v为扫描时间最长的物品加上n , n 为 物品的个数。
2024-03-18 20:12:03 609
原创 P1005 [NOIP2007 提高组] 矩阵取数游戏
帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n×m 的矩阵,矩阵中的每个元素 ai,j 均为非负整数。dp[i][j]代表剩下的长度为到 j - i 长度时,先取i-1位置上的数较大,还是取j+1上的数较大。表示 在 i ~ j 区间 内 ,取 i-1这个位置上的数,还是 j+1这个位置上的数。对于 100% 的数据,满足 1≤n,m≤80,0≤ai,j≤1000。对于 60% 的数据,满足 1≤n,m≤30,答案不超过 1016。输出文件仅包含 1 行,为一个整数,即输入矩阵取数后的最大得分。
2024-03-18 20:00:55 543
原创 P1041 [NOIP2003 提高组] 传染病控制
研究表明,这种传染病的传播具有两种很特殊的性质;第一是它的传播途径是树型的,一个人 X 只可能被某个特定的人 Y 感染,只要 Y 不得病,或者是 XY 之间的传播途径被切断,则 X 就不会得病。第二是,这种疾病的传播有周期性,在一个疾病传播周期之内,传染病将只会感染一代患者,而不会再传播给下一代。这些性质大大减轻了蓬莱国疾病防控的压力,并且他们已经得到了国内部分易感人群的潜在传播途径图(一棵树)。但是,麻烦还没有结束。
2024-03-18 19:29:12 392
原创 3048. 标记所有下标的最早秒数 I(补题 ,二分 正序 逆序)
第 5 秒,标记 changeIndices[5] ,也就是标记下标 3 ,因为 nums[3] 等于 0。第 6 秒,标记 changeIndices[6] ,也就是标记下标 2 ,因为 nums[2] 等于 0。第 4 秒:标记 changeIndices[4] ,也就是标记下标 2 ,因为 nums[2] 等于 0。第 6 秒:标记 changeIndices[6] ,也就是标记下标 1 ,因为 nums[1] 等于 0。nums 变为 [1,1]。
2024-03-16 20:41:54 789 1
原创 Fix a Tree(树的遍历,判断是否有环 并连成一颗树 )
给定一些连接的点,可以时有环的,也可以是没有环的。将他们全部合成一颗树,树根只有一个。我们考虑,确定一个为树根,将自环的一个节点,连接到给定的根节点上,这样子就解环了。比如 数列 (1,2,2)、(2,3,1) 和 (2,1,3) 都是因为。第一行是一个整数 n (2≤n≤200000) ----树的顶点个数。表示为 [2,3,3,2]。第二行包含 n 个整数 (1≤ai≤n。修改的次数可以复制一个数组和原数组做对比。和一个通过最小更改次数而更改成功的。你需要对数组里面的值,通过。而更改成功的有效数组。
2024-03-15 17:00:25 860
原创 Buy Low Sell High(反悔贪心)
比如:当前几个为 5 ,而你已经买入了3,它先会算5-3 = 2这个差价,ans += 2,当后面遇到 7时,7-3 更为划算,这时可以时,7-5 =2 ,ans+= 2;样例1:分别在价格为5,4,2的时候买入,分别在价格为9,12,10的时候卖出,总利润为−5−4+9+12−2+10=20−5−4+9+12−2+10=20 . 翻译贡献者UID:36080。已知接下来N天的股票价格,每天你可以买进一股股票,卖出一股股票,或者什么也不做.N天之后你拥有的股票应为0,当然,希望这N天内能够赚足够多的钱.
2024-03-15 16:36:13 340
原创 P3047 [USACO12FEB] Nearby Cows G(树形换根dp )
给你一棵 n 个点的树,点带权,对于每个节点求出距离它不超过 k 的所有节点权值和 mi。第一行两个正整数 n,k。接下来 n−1 行,每行两个正整数 u,v,表示 u,v 之间有一条边。最后 n 行,每行一个非负整数 ci,表示点权。
2024-01-22 15:42:59 491
原创 P2014 [CTSC1997] 选课 or P1273 有线电视网(树型dp + 分组背包问题)
在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有 N 门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程 a 是课程 b 的先修课即只有学完了课程 a,才能学习课程 b)。一个学生要从这些课程里选择 M 门课程学习,问他能获得的最大学分是多少?
2024-01-22 10:32:00 1211
原创 P3128 [USACO15DEC] Max Flow P(树上差分)
FJ 给他的牛棚的 N 个隔间之间安装了 N−1 根管道,隔间编号从 1 到 N。所有隔间都被管道连通了。FJ 有 K 条运输牛奶的路线,第 i 条路线从隔间 si 运输到隔间 ti。一条运输路线会给它的两个端点处的隔间以及中间途径的所有隔间带来一个单位的运输压力,你需要计算压力最大的隔间的压力是多少。第一行输入两个整数 N 和 K。接下来 N−1 行每行输入两个整数 x 和 y,其中 x=y。表示一根在牛棚 x 和 y 之间的管道。
2024-01-20 22:29:05 438
原创 902. 最大为 N 的数字组合 和 2376. 统计特殊整数(数位dp,记忆化搜索模板)
一般的记忆化回溯数组只需要记录几个数字后面合法的数字个数,可是这里有个限制,所以要用二位的数组记录dp[i][mask] ,i表示第i为,mask表示那些数字已被使用过了,其他数字的组合个数。2187 个七位数字,6561 个八位数字和 19683 个九位数字。我们可以写 3 个一位数字,9 个两位数字,27 个三位数字,81 个四位数字,243 个五位数字,729 个六位数字,分别表示,第几个为,这个为是否有限制,这个为是否有前导0。总共,可以使用D中的数字写出 29523 个整数。之间特殊整数的数目。
2024-01-20 22:02:29 423
原创 P1020 [NOIP1999 提高组] 导弹拦截
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度,计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
2024-01-14 08:54:06 631 1
原创 P1379 八数码难题
在 3×3 的棋盘上,摆有八个棋子,每个棋子上标有 1 至 8 的某一数字。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为 123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。g(n)为从初始节点s到节点n的最佳路径耗散值的估计值;h(n)为从节点n到目标节点t的最佳路径耗散值的估计值,称为启发函数;f(n)为从初始节点s经过节点n到达目标节点的最佳路径耗散值的估计值,成为评价函数,我们每次从叶节点选出f(n)最小的节点扩展。
2024-01-13 18:08:40 433
原创 P1434 [SHOI2002] 滑雪(两种解法 dfs , bfs +记忆化搜索)
Michael 喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度会减小。在上面的例子中,一条可行的滑坡为 24−17−16−1(从 24 开始,在 1 结束)。当然 25-24-23-……-3-2-1 更长。事实上,这是最长的一条。
2024-01-12 09:35:58 871 3
原创 P1032 [NOIP2002 提高组] 字串变换
若在 1010 步(包含 1010 步)以内能将 A 变换为 B,则输出最少的变换步数;规则的含义为:在 A 中的子串 A1 可以变换为 B1,A2 可以变换为 B2⋯。对于 100%100% 数据,保证所有字符串长度的上限为 2020。接下来若干行,每行有两个字符串 Ai,Bi,表示一条变换规则。共进行了 3 次变换,使得 A 变换为 B。例如:A=abcd,B=xyz,NOIP 2002 提高组第二题。注意逆向的时候是从后变到前的。第一行有两个字符串 A,B。
2024-01-11 16:16:14 423
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人