- 博客(36)
- 收藏
- 关注
原创 B . A Cure for the Common Code kmp + 区间dp
B . A Cure for the Common Code kmp + 区间dp题目描述You’ve been tasked with relaying coded messages to your fellow resistance fighters. Each coded message is a sequence of lower-case letters that you furtively scrawl on monuments in the dead of night.Since you’
2022-07-03 14:53:50 121
原创 食物链 拓展域 边带权
首先我们知道并查集可以维护集合间的关系,当关系只有一种的时候是比较好维护的。但是当关系较多的时候拓展域在我看来是比边带权好想一些的,因为边带权表示多种关系的的话势必要利用每个节点到根结点的距离来做文章。例如下题:食物链,题目链接边带权:我们把所有有关系的的节点都放到一个集合内,并用每个节点到其根结点的距离来表示其与根节点的的关系,而根据每个节点与根节点的关系我们就可以得知每个节点之间的关系,设根节点为A,假设B到根节点的距离为1,并表示B被A吃。再假设C到根节点的距离为2,并表示A被C吃,那么根据题
2022-05-05 02:33:11 258
原创 数组模拟单双链表
#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int, int>PII;const int N = 1e5 + 10;int head = -1, e[N], ne[N];int tt = 0;int main() { int n, k, x; char c; cin >> n; for (int i = 1; i <= n; i++)
2022-05-02 22:24:56 526
原创 237. 程序自动分析 离散化 并查集
在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。考虑一个约束满足问题的简化版本:假设 x1,x2,x3,… 代表程序中出现的变量,给定 n 个形如 xi=xj 或 xi≠xj 的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。现在给出一些约束满足问题,请分别对它们进行判定。输入格
2022-04-30 16:41:42 107
原创 A . Total Eclipse 并查集 (逆向加点)
A . Total Eclipse [ 问题 3187 ] [ 讨论 ]DescriptionThere are n cities and m bidirectional roads in Byteland. These cities are labeled by 1,2,…,n, the brightness of the i-th city is bi.Magician Sunset wants to play a joke on Byteland by making a total eclip
2022-04-30 00:12:32 124
原创 139. 回文子串的最大长度 字符串hash Manacher
manacher图文大佬画的,昨天晚上看的大概懂了,今天实现一下。如果一个字符串正着读和倒着读是一样的,则称它是回文的。给定一个长度为 N 的字符串 S,求他的最长回文子串的长度是多少。输入格式输入将包含最多 30 个测试用例,每个测试用例占一行,以最多 1000000 个小写字符的形式给出。输入以一个以字符串 END 开头的行表示输入终止。输出格式对于输入中的每个测试用例,输出测试用例编号和最大回文子串的长度(参考样例格式)。每个输出占一行。输入样例:abcbabcbabcbaab
2022-04-27 23:01:36 864
原创 138. 兔子与兔子 字符串hash
很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的 DNA 序列。我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母)。然后我们每次选择两个区间,询问如果用两个区间里的 DNA 序列分别生产出来两只兔子,这两个兔子是否一模一样。注意两个兔子一模一样只可能是他们的 DNA 序列一模一样。输入格式第一行输入一个 DNA 字符串 S。第二行一个数字 m,表示 m 次询问。接下来 m 行,每行四个数字 l1,r1,l2,r2,分别表示此
2022-04-26 23:10:16 117
原创 137. 雪花雪花雪花 hash表
有 N 片雪花,每片雪花由六个角组成,每个角都有长度。第 i 片雪花六个角的长度从某个角开始顺时针依次记为 ai,1,ai,2,…,ai,6。因为雪花的形状是封闭的环形,所以从任何一个角开始顺时针或逆时针往后记录长度,得到的六元组都代表形状相同的雪花。例如 ai,1,ai,2,…,ai,6 和 ai,2,ai,3,…,ai,6,ai,1 就是形状相同的雪花。ai,1,ai,2,…,ai,6 和 ai,6,ai,5,…,ai,1 也是形状相同的雪花。我们称两片雪花形状相同,当且仅当它们各自从某一角开
2022-04-26 22:08:38 114
原创 136. 邻值查找
给定一个长度为 n 的序列 A,A 中的数各不相同。对于 A 中的每一个数 Ai,求:min1≤j<i|Ai−Aj|以及令上式取到最小值的 j(记为 Pi)。若最小值点不唯一,则选择使 Aj 较小的那个。输入格式第一行输入整数 n,代表序列长度。第二行输入 n 个整数A1…An,代表序列的具体数值,数值之间用空格隔开。输出格式输出共 n−1 行,每行输出两个整数,数值之间用空格隔开。分别表示当 i 取 2∼n 时,对应的 min1≤j<i|Ai−Aj| 和 Pi 的值。#in
2022-04-26 00:49:22 1613
原创 单调队列 最大子序和
输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。注意: 子序列的长度至少是 1。输入格式第一行输入两个整数 n,m。第二行输入 n 个数,代表长度为 n 的整数序列。同一行数之间用空格隔开。输出格式输出一个整数,代表该序列的最大子序和。#include<bits/stdc++.h>using namespace std;int s[1000001]={0};deque<int>q;int main(){
2022-04-25 22:11:49 288
原创 134. 双端队列
达达现在碰到了一个棘手的问题,有 N 个整数需要排序。达达手头能用的工具就是若干个双端队列。她从 1 到 N 需要依次处理这 N 个数,对于每个数,达达能做以下两件事:1.新建一个双端队列,并将当前数作为这个队列中的唯一的数;2.将当前数放入已有的队列的头之前或者尾之后。对所有的数处理完成之后,达达将这些队列按一定的顺序连接起来后就可以得到一个非降的序列。请你求出最少需要多少个双端序列。输入格式第一行输入整数 N,代表整数的个数。接下来 N 行,每行包括一个整数 Di,代表所需处理的整数。
2022-04-25 21:44:43 485
原创 133. 蚯蚓
蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓。蛐蛐国里现在共有 n 只蚯蚓,第 i 只蚯蚓的长度为 ai ,所有蚯蚓的长度都是非负整数,即可能存在长度为 0 的蚯蚓。每一秒,神刀手会在所有的蚯蚓中,准确地找到最长的那一只,将其切成两段。若有多只最长的,则任选一只。神刀手切开蚯蚓的位置由有理数 p 决定。一只长度为 x 的蚯蚓会被切成两只长度分别为 ⌊px⌋ 和 x−⌊px⌋ 的蚯蚓。特殊地,如果这两个数的其中一个等于 0,则这个长度为 0 的蚯
2022-04-25 17:01:02 103
原创 1.小组队列
小组队列有 n 个小组要排成一个队列,每个小组中有若干人。当一个人来到队列时,如果队列中已经有了自己小组的成员,他就直接插队排在自己小组成员的后面,否则就站在队伍的最后面。请你编写一个程序,模拟这种小组队列。输入格式:输入将包含一个或多个测试用例。对于每个测试用例,第一行输入小组数量 t。接下来 t 行,每行输入一个小组描述,第一个数表示这个小组的人数,接下来的数表示这个小组的人的编号。编号是 0 到 999999 范围内的整数。一个小组最多可包含 1000 个人。最后,命令列表如下.
2022-04-24 20:46:03 160
原创 直方图中最大的矩形 单调栈
单调栈,n个数据{2,3,1,4,5,2},找到每个数左边和右边离其最近的比起小的数,例:找到3左边或右边离三最近的比3小的数,显然是2,1。如果我们用纯枚举时间复杂度应该是O(n^2),而用单调栈优化一下可以达到宏观上O(n);131. 直方图中最大的矩形直方图是由在公共基线处对齐的一系列矩形组成的多边形。矩形具有相等的宽度,但可以具有不同的高度。例如,图例左侧显示了由高度为 2,1,4,5,1,3,3 的矩形组成的直方图,矩形的宽度都为 1:通常,直方图用于表示离散分布,例如,文本中字符的频率
2022-04-24 15:19:09 130
原创 B . Yet Another Multiple Problem
B . Yet Another Multiple ProblemDescriptionThere are tons of problems about integer multiples. Despite the fact that the topic is not original, the content is highly challenging. That’s why we call it “Yet Another Multiple Problem”.In this problem, you’
2021-11-16 22:09:04 231
原创 2021-10-16
E . Ideal Path [ 问题 7218 ] [ 讨论 ]DescriptionNew labyrinth attraction is open in New Lostland amusement park. The labyrinth consists of n rooms connected by m passages. Each passage is colored into some color ci . Visitors of the labyrinth are dropped fr
2021-10-16 02:32:19 64
原创 2021-09-26 位运算枚举指数型
#include<bits/stdc++.h>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#pragma GCC optiize(2)#define maxn 0x3f3f3f3fint main(){ int n; cin>>n; int k=1; for(int i=1;i<n;i++) { k<<=1; .
2021-09-28 22:58:35 93
原创 运用Doolitle分解法解线性方程组
Doolittle分解法是将系数矩阵A分解为一个单位下三角矩阵L和一个上三角矩阵U的乘积,即A=L*U,其中L和U的形式为L=,U=然后通过公式L*Y=b(顺代)解得Y;最后通过公式Y=UX(回代)解得X。运用Dolittle分解法求解线性方程组的基本步骤为:(1)输入方程组的阶数n,系数矩阵A和右端的常系数矩阵b;(2)L矩阵对角元素赋值为1;(3)按顺序(k=1,2,…,n)先行后列交替计算U和L的元素:①对j = 1,2,…,n,计算,对i = 2,3,…,n,计算②计算U的第二
2021-09-17 15:37:50 3390 1
原创 I . Beer Coasters 最小编辑距离
I . Beer CoastersDescriptionOften, in an average pub, the beer is served in a mug which is, quite obviously, wet from inside, but also wet from outside. The barkeeper typically has no capacity to dry freshly washed mugs. To protect the table and the (opt
2021-09-16 00:11:44 93
原创 2021-09-14
E . Screamers in the Storm [ 问题 7824 ] [ 讨论 ]DescriptionAs you might remember from your first years in school, the human race invented beer brewing at least about 7000 years ago. The total amount of beer consumed from those times must be monumental and
2021-09-14 00:56:04 105
原创 2021-09-13 异或前缀和判最大回文子串(字母顺序可自排)
D . Beer Mugs [ 问题 7823 ] [ 讨论 ]DescriptionDamian is a beer mug collector. His collection fills most of the shelves in his vintage wooden cabinet where all mugs are proudly displayed. The mugs are of various brands. There might be, and often are, more m
2021-09-13 18:13:00 125
原创 B . Sorting Device
B . Sorting Device [ 问题 7993 ] [ 讨论 ]DescriptionAfter being stuck at home for months because of covid, you decided to explore the contents of your parent’s basement. Among numerous useless items, you found one peculiar object - a sorting device from the
2021-09-11 19:50:30 103
原创 2021-04-28
C. Going Hometime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputIt was the third month of remote learning, Nastya got sick of staying at dormitory, so she decided to return to her hometown. In order t
2021-04-28 00:57:16 74
原创 最优乘车
本来以为是dijkstra,后来经过大佬点发知道了是floyd;DescriptionH城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。一名旅客最近到H城旅游,他很想去S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达S公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士, 这样换乘几次后到达S公园。现在用整数1,
2021-03-31 00:21:57 229 1
原创 floyd 信使
首先什么是弗洛伊德算法,不是很清楚的最好搜一下。A. 信使 [ 讨论 ]Description战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。指挥部设在第一个哨所。当指挥部下达一个命令后,指挥部就派出若干个信使向与指挥部相连的哨所送信。当一个哨所接到信后,这个哨所内的信使们也以同样的方式向其他哨所送信。直至所有n个哨所全部接到命令后,送信才算成功。因为准备充足,每个哨所内都安排了足够的信使(如果一个哨所与其他
2021-03-30 23:44:42 204 1
原创 零件分组(stick) 贪心 水
E. 零件分组(stick) [ 问题 1800 ] [ 讨论 ]Description某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(Wi)。现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和重量都不下降(若i<j,则Li≤Lj,Wi≤Wj)的序列。请问至少要分成几组?Input第一行为一个整数N(N≤1000),表示零件的个数。第二行有N对正整数,每对正整数表示这些零件的长度和重量,长度和重量均不超过10000。Output仅一行,即最少分成的组数。
2021-03-25 17:12:41 1420 1
原创 装载问题 一条船。
Description有一批共n个集装箱要装上艘载重量为c的轮船,其中集装箱i的重量为wi。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。Input由文件load.in给出输入数据。第一行有2个正整数n和c。n是集装箱数,c是轮船的载重量。接下来的1行中有n个正整数,表示集装箱的重量。Output将计算出的最大装载重量输出到文件load.out。SamplesInput 复制5 107 2 6 5 4Output10首先是dfs的写
2021-03-18 18:19:28 274
原创 信息奥赛一本通 例题 迷宫问题
设有一个N∗N(2≤N<10)方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放0和1,0表示可通,1表示不能,入口和出口处肯定是0。迷宫走的规则如下所示:即从某点开始,有八个方向可走,前进方格中数字为0时表示可通过,为1时表示不可通过,要另找路径。找出所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总数,如果无法到达,则输出0。SamplesInput 复制30 0 00 1 11 0 0Output2冗杂而又笨重的程序int q[1001][1001
2021-03-17 22:59:06 559
原创 n皇后
n皇后 第一篇 粗略int tu[10]={0};//因题目里n<=9;void dfs(int t,int n);int main() { int n; read(n); if(n>=4) dfs(1,n); else cout<<"no solute!";//这里取了个巧,3阶一下肯定是没有题解的所以就直接出答案。 return 0;}void dfs(int t,int n)//重头戏。t是代表第几个
2021-03-17 21:23:13 95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人