算法
文章平均质量分 56
zyc_3
我很懒
展开
-
暑假模板和例题
hh同学们怎么都呆呆的呀T~T原创 2022-07-17 09:20:20 · 126 阅读 · 0 评论 -
欧拉回路(笔记)
求有向图字典序最小的欧拉路径。第一行两个整数 n,mn,mn,m 表示有向图的点数和边数。接下来 mmm 行每行两个整数 u,vu,vu,v 表示存在一条 u→vu\to vu→v 的有向边。如果不存在欧拉路径,输出一行 。否则输出一行 m+1m+1m+1 个数字,表示字典序最小的欧拉路径。样例输出 #1样例 #2样例输入 #2样例输出 #2样例 #3样例输入 #3样例输出 #3提示对于 50%50\%50% 的数据,n,m≤103n,m\leq 10^3n,m≤103。对于 1原创 2022-07-09 10:38:22 · 107 阅读 · 0 评论 -
搜索例题精选
邮票面值设计给定一个信封,最多只允许粘贴 NNN 张邮票,计算在给定 KKK(N+K≤15N+K \le 15N+K≤15)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值 MAXMAXMAX,使在 111 至 MAXMAXMAX 之间的每一个邮资值都能得到。例如,N=3N=3N=3,K=2K=2K=2,如果面值分别为 111 分、444 分,则在 1∼61\sim 61∼6 分之间的每一个邮资值都能得到(当然还有 888 分、999 分和 121212 分);如果面值分别为 1原创 2022-06-02 19:19:10 · 87 阅读 · 0 评论 -
[NOIP2013 提高组] 花匠
[NOIP2013 提高组] 花匠题目描述花匠栋栋种了一排花,每株花都有自己的高度。花儿越长越大,也越来越挤。栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致。具体而言,栋栋的花的高度可以看成一列整数h1,h2,...,hnh_1,h_2,...,h_nh1,h2,...,hn。设当一部分花被移走后,剩下的花的高度依次为g1,g2,...,gmg_1,g_2,...,g_mg1,g2,...,gm,则栋栋希望下面两个条件中至少原创 2022-05-28 22:57:37 · 360 阅读 · 0 评论 -
[NOIP2013 提高组] 火柴排队
[NOIP2013 提高组] 火柴排队题目描述涵涵有两盒火柴,每盒装有 nnn 根火柴,每根火柴都有一个高度。 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为:$ \sum (a_i-b_i)^2$其中 aia_iai 表示第一列火柴中第 iii 个火柴的高度,bib_ibi 表示第二列火柴中第 iii 个火柴的高度。每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太原创 2022-05-22 12:22:31 · 364 阅读 · 0 评论 -
快速幂模板
快速幂快速幂用于求aka^kak,k比较大的情况。当需要对答案取模时,也符合运算律。快速幂的思想就是把k看成一个二进制数,原来相当于乘k次a,现在乘的次数变成log2(k)log_2(k)log2(k)。比如我求101110^{11}1011 ,11 = 1011(2)1011_{(2)}1011(2)我们每次进行lowbit操作,同时注意此时a的权值变化,代码如下#include<bits/stdc++.h>using namespace std;int n,m,k,x;i原创 2022-05-22 11:26:55 · 93 阅读 · 0 评论 -
序列(E)
序列外星人登陆了地球,正在学习 OI 的你接收到了外星人的题目。给定一个长度为 n的非负整数序列 a和一个常数m,元素从 1到n 编号。你需要将其划分成若干非空子串。对于每个非空子串,其价值为所有元素按位或的结果减去常数 m。输出所有划分方法中所有子串价值和的最小值。Subtask 1输出所有数的按位或和即可。Subtask 2,3设计一个DP算法:令fi 为将前i个数拆分成若干个子串的价值和的最小值,一定有f_i=min{f_(j−1)+S(j,i)}(其实就是暴力)时间复杂度为O(原创 2022-05-17 17:02:11 · 102 阅读 · 0 评论 -
【17 提高 1】 给
【17 提高 1】 给背景描述对于任意 1≤k≤n, 求有多少个左右区分的恰有 k 个叶子节点的二叉树, 满足对于每个节点要么没有叶子节点要么有两个节点, 同时不存在一个叶子节点, 使得根到它的路径上有不少于 m 条向左的边。你只需要求出答案对 998244353 取模的结果。输入格式输入共一行,两个正整数 m, n。输出格式输出 n 行每行一个整数, 第 i 行输出恰有 i 个叶子节点的时候的答案对 998244353 取模的结果。样例输入3 5样例输出11248原创 2022-05-14 14:14:57 · 279 阅读 · 2 评论 -
[17 提高 1] 斯
[17 提高 1] 斯题意按题目的要求选出几个人赌,因为硬币只有正反两种情况,取这两种情况盈利的最小值所有方案中的最大值。尝试1暴力:先确定和几个人赌,再确定和那几个人,用组合的公式估一下肯定会爆,不能拿全分尝试2用动态规划的思想做设数组f[ i ] 到第几个人的最好方案,那么每加入一个人,原先最好的方案加上这个人未必是最好的方案,还是要枚举,所以动态规划也不便捷。STD不难发现, 如果我们知道正反面分别和几个庄家下了注,我们下的注一定是收益最多的几个庄家, 所以我们可以把两组庄家按照收益原创 2022-05-12 16:53:09 · 44 阅读 · 0 评论 -
幻想过山车
题目:样例图片:思路 :题意是路可以重复走,使得到达n点的时间恰好是p根据这个性质,我们要想办法凑出这个时间P来。根据路可以重复走的性质,我们可以找一个环来卡时间,什么样的环最佳呢?我们先给出答案,以1的最短出边 * 2 构成一个环 在本样例中即为 1 <——> 2 <——> 1对应代码: int u,v,w,i; re(n); re(m); for(i=1;i<=m;i++) { re(u); re(v); re(w).原创 2022-05-05 21:36:52 · 87 阅读 · 0 评论 -
树链剖分(含例题)
树链剖分介绍:模板题:【模板】最近公共祖先(LCA) - 洛谷图片来自:通俗易懂的树链剖分详解 - 一剑缥缈的洛咕博客 - 洛谷博客树链剖分的优点:求LCA中的优化无非就是减少无效搜索的次数,树链剖分把树拆成不同的链(保证不重不漏),因为两个点的LCA一定在一条链上(同一个点),所以如果搜索到的点不在同一条链上,那么不是倍增跳或是······,而是跳过一整条链,这样搜索的速度会大幅提高。注释代码:#include<bits/stdc++.h>using names.原创 2022-05-04 21:17:07 · 380 阅读 · 0 评论 -
金字塔(算法竞赛进阶指南)
虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下。经过多年的研究,科学家对这座金字塔的内部结构已经有所了解。首先,金字塔由若干房间组成,房间之间连有通道。如果把房间看作节点,通道看作边的话,整个金字塔呈现一个有根树结构,节点的子树之间有序,金字塔有唯一的一个入口通向树根。并且,每个房间的墙壁都涂有若干种颜色的一种。探险队员打算进一步了解金字塔的结构,为此,他们使用了一种特殊设计的机器人。这种机器人会从入口进入金字塔,之后对金字塔进行深度优先遍历。机器人每进入一原创 2022-04-30 07:32:54 · 754 阅读 · 0 评论 -
多边形(算法竞赛进阶指南)
“多边形游戏”是一款单人益智游戏。游戏开始时,给定玩家一个具有 N 个顶点 N 条边(编号 1∼N)的多边形,如图 1 所示,其中 N=4。每个顶点上写有一个整数,每个边上标有一个运算符 +(加号)或运算符 *(乘号)。第一步,玩家选择一条边,将它删除。接下来在进行 N−1 步,在每一步中,玩家选择一条边,把这条边以及该边连接的两个顶点用一个新的顶点代替,新顶点上的整数值等于删去的两个顶点上的数按照删去的边上标有的符号进行计算得到的结果。下面是用图 1 给出的四边形进行游戏的全过程。原创 2022-04-24 17:25:57 · 298 阅读 · 0 评论 -
石子合并(算法竞赛进阶指南)
设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;如果第二步是原创 2022-04-24 16:37:41 · 156 阅读 · 0 评论 -
陪审团(算法竞赛进阶指南)
详见AcWing 280. 陪审团 - AcWing在一个遥远的国家,一名嫌疑犯是否有罪需要由陪审团来决定。陪审团是由法官从公民中挑选的。法官先随机挑选 N 个人(编号 1,2…,N)作为陪审团的候选人,然后再从这 N 个人中按照下列方法选出 M 人组成陪审团。首先,参与诉讼的控方和辩方会给所有候选人打分,分值在 0 到 20 之间。第 i 个人的得分分别记为 p[i] 和 d[i]。为了公平起见,法官选出的 M 个人必须满足:辩方总分 D 和控方总分 P 的差的绝对值 |D−P|原创 2022-04-23 21:21:15 · 203 阅读 · 0 评论 -
自然数的拆分(背包)
给定一个自然数 N,要求把 N 拆分成若干个正整数相加的形式,参与加法运算的数可以重复。注意:拆分方案不考虑顺序;至少拆分成 2 个数的和。求拆分的方案数 mod2147483648 的结果。输入格式一个自然数 N。输出格式输入一个整数,表示结果。数据范围1≤N≤4000输入样例:7输出样例:14从背包的角度来看:体积为v的背包,体积分别为1~n -1的物品。状态确立:f[j],体积为j的背包的方案数初始化:f[0] = 1;状态转移:原创 2022-04-23 20:44:22 · 295 阅读 · 0 评论 -
数字组合(算法竞赛进阶指南)
278. 数字组合 - AcWing题库给定 N 个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,求有多少种选择方案。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数,表示 A1,A2,…,AN。输出格式包含一个整数,表示可选方案数。数据范围1≤N≤100,1≤M≤10000,1≤Ai≤1000,答案保证在 int 范围内。输入样例:4 41 1 2 2输出样例:31.把题意理解成在一个体积为M的背包里,放原创 2022-04-23 20:31:56 · 679 阅读 · 0 评论 -
AcWing 170.加成序列
满足如下条件的序列X(序列中元素被标号为1、2、3…m)被称为“加成序列”:X[1]=1 X[m]=nX[m]=n X[1]<X[2]<…<X[m−1]<X[m] 对于每个k(2≤k≤m)都存在两个整数i和j(1≤i,j≤k−1,i和j可相等),使得X[k]=X[i]+X[j]你的任务是:给定一个整数n,找出符合上述条件的长度m最小的“加成序列”。如果有多个满足要求的答案,只需要找出任意一个可行解。输入格式输入包含多组测试用例。每...原创 2022-04-17 00:22:07 · 69 阅读 · 0 评论 -
奥赛一本通 小木棍
题目描述原题来自:CERC 1995乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过 50 。现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度。给出每段小木棍的长度,编程帮他找出原始木棍的最小可能长度。输入格式第一行为一个单独的整数 N 表示砍过以后的小木棍的总数。 第二行为 N 个用空格隔开的正整数,表示 N 根小木棍的长度。输出格式输出仅一行,表示要求的原始木棍的最小可能长度。样例输入数据 195 2 1原创 2022-04-16 23:52:55 · 100 阅读 · 0 评论 -
AcWing 165.小猫爬山
翰翰和达达饲养了 N 只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。翰翰和达达只好花钱让它们坐索道下山。索道上的缆车最大承重量为 W,而 N 只小猫的重量分别是 C1、C2……CN当然,每辆缆车上的小猫的重量之和不能超过 W。每租用一辆缆车,翰翰和达达就要付 1 美元,所以他们想知道,最少需要付多少美元才能把这 N 只小猫都运送下山?输入格式第 1 行:包含两个用空格隔开的整数,N 和 W。第原创 2022-04-16 20:16:48 · 926 阅读 · 1 评论 -
AcWing 1118 分成互质组
给定 nn个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?输入格式第一行是一个正整数 n。第二行是 nn个不大于10000的正整数。输出格式一个正整数,即最少需要的组数。数据范围1≤n≤10输入样例:614 20 33 117 143 175输出样例:3#include<bits/stdc++.h>using namespace std;const int N = 10;int gcd(int x, i.原创 2022-04-16 14:49:41 · 172 阅读 · 0 评论 -
AcWing 1117 单词接龙
单词接龙是一个与我们经常玩的成语接龙相类似的游戏。现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”,每个单词最多被使用两次。在两个单词相连时,其重合部分合为一部分,例如 beast 和 astonish ,如果接成一条龙则变为 beastonish。我们可以任意选择重合部分的长度,但其长度必须大于等于1,且严格小于两个串的长度,例如 at 和 atide 间不能相连。输入格式输入的第一行为一个单独的整数nn表示单词数,以下nn行每行有一个单词(只含有...原创 2022-04-16 14:14:11 · 75 阅读 · 0 评论 -
AcWing 178.第k短路
给定一张 NN 个点(编号 1,2…N1,2…N),MM 条边的有向图,求从起点 SS 到终点 TT 的第 KK 短路的长度,路径允许重复经过点或边。注意: 每条最短路中至少要包含一条边。输入格式第一行包含两个整数 NN 和 MM。接下来 MM 行,每行包含三个整数 A,BA,B 和 LL,表示点 AA 与点 BB 之间存在有向边,且边长为 LL。最后一行包含三个整数 S,TS,T 和 KK,分别表示起点 SS,终点 TT 和第 KK 短路。输出格式输出占一行,包含一个整数,表示原创 2022-04-14 21:17:34 · 248 阅读 · 0 评论 -
洛古 P1774 最接近神的人
置顶题解 P1908 【逆序对】 - zhylj 的博客 - 洛谷博客链接里有过程图,但题解里的题大小顺序和本题是相反的,但问题不大题目描述破解了符文之语,小FF开启了通往地下的道路。当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案。而石门上方用古代文写着“神的殿堂”。小FF猜想里面应该就有王室的遗产了。但现在的问题是如何打开这扇门……仔细研究后,他发现门上的图案大概是说:古代人认为只有智者才是最容易接近神明的。而最聪明的人往往通过一种仪式选拔出来原创 2022-04-14 16:57:02 · 141 阅读 · 0 评论 -
线段树模板2
题目描述如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上xx 将某区间每一个数加上xx 求出某区间每一个数的和 输入格式第一行包含三个整数n,m,pn,m,p,分别表示该数列数字的个数、操作的总个数和模数。第二行包含nn个用空格分隔的整数,其中第ii个数字表示数列第ii项的初始值。接下来mm行每行包含若干个整数,表示一个操作,具体如下:操作11: 格式:1 x y k含义:将区间[x,y][x,y]内每个数乘上...转载 2022-04-12 16:48:00 · 113 阅读 · 0 评论 -
优先队列dijkstra
#include<bits/stdc++.h>using namespace std;typedef pair<int,int> PII;const int N = 1e6 + 10;int n,m;int h[N],w[N],e[N],ne[N],idx;int dist[N];bool st[N];void add(int a,int b,int c){ e[idx] = b,w[idx] = c,ne[idx] = h[a],h[a] = .原创 2022-04-10 11:42:29 · 406 阅读 · 0 评论 -
AcWing 字串变换
已知有两个字串AA,BB及一组字串变换的规则(至多66个规则):A1→B1A1→B1A2→B2A2→B2…规则的含义为:在AA中的子串A1A1可以变换为B1B1、A2A2可以变换为B2…B2…。例如:AA=abcdBB=xyz变换规则为:abc→→xuud→→yy→→yz则此时,AA可以经过一系列的变换变为BB,其变换的过程为:abcd→→xud→→xy→→xyz共进行了三次变换,使得AA变换为BB。...原创 2022-04-10 11:36:02 · 206 阅读 · 0 评论 -
NOIP2015 信息传递 tarjan求法
题目描述有nn个同学(编号为11到nn)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为ii的同学的信息传递对象是编号为T_iTi的同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息, 但是每人只会把信息告诉一个人,即自己的信息传递对象)。当有人从别人口中得知自 己的生日时,游戏结束。请问该游戏一共可以进行几轮?输入格式共22行。第1...原创 2022-04-10 10:07:39 · 116 阅读 · 0 评论 -
AcWing 魔板
Rubik 先生在发明了风靡全球的魔方之后,又发明了它的二维版本——魔板。这是一张有88个大小相同的格子的魔板:1 2 3 48 7 6 5我们知道魔板的每一个方格都有一种颜色。这88种颜色用前88个正整数来表示。可以用颜色的序列来表示一种魔板状态,规定从魔板的左上角开始,沿顺时针方向依次取出整数,构成一个颜色序列。对于上图的魔板状态,我们用序列(1,2,3,4,5,6,7,8)(1,2,3,4,5,6,7,8)来表示,这是基本状态。这里提供三种基本操作,分...原创 2022-04-09 23:02:55 · 125 阅读 · 0 评论 -
电路维修AcWing
12231达达是来自异世界的魔女,她在漫无目的地四处漂流的时候,遇到了善良的少女翰翰,从而被收留在地球上。翰翰的家里有一辆飞行车。有一天飞行车的电路板突然出现了故障,导致无法启动。电路板的整体结构是一个RR行CC列的网格(R,C≤500R,C≤500),如下图所示。每个格点都是电线的接点,每个格子都包含一个电子元件。电子元件的主要部分是一个可旋转的、连接一条对角线上的两个接点的短电缆。在旋转之后,它就可以连接另一条对角线的两个接点。电路板左上角的接点接入直流电源,右下...原创 2022-04-09 22:53:19 · 462 阅读 · 0 评论 -
线段树模板1
如题,已知一个数列,你需要进行下面两种操作:将某区间每一个数加上kk。 求出某区间每一个数的和。输入格式第一行包含两个整数 n, mn,m,分别表示该数列数字的个数和操作的总个数。第二行包含 nn 个用空格分隔的整数,其中第 ii 个数字表示数列第 ii 项的初始值。接下来 mm 行每行包含 33 或 44 个整数,表示一个操作,具体如下:1 x y k:将区间[x, y][x,y]内每个数加上kk。 2 x y:输出区间[x, y][x,y]内每个数的和。输出格式...原创 2022-04-16 23:51:49 · 46 阅读 · 0 评论