[洛谷P1279][题解]字串距离】的更多相关文章

题目戳我 很明显的这题是一道dp,主要讲一下几个细节 1.初始化 我们需要初始化边界情况也就是一个字符串为空的情况 #----------# #----------# A:aaaaaa A:□□□□□□ B:□□□□□□ or B:bbbbbb #----------# #----------# 这时f[i][0]=i*k,f[0][j]=j*k. 另外注意都为空也就是f[0][0]=0 2.dp 这道题的转移有三种 ()字符对字符 A:xxx...a B:xxx...b 由f[i-][j-]转…
洛谷P1032:https://www.luogu.org/problemnew/show/P1032 思路 初看题目觉得挺简单的一道题 但是仔细想了一下发现实现代码挺麻烦的 而且2002年的毒瘤输入是什么鬼啊 连组数都没有的真的好吗 这道题参考了题解才完成 需要用到我从来没有用过的map来判重 然后就是广搜+string的一些自带函数运用 PS:这道题本地测试数据时要用Ctrl+Z+回车才可以出ans 代码 #include<iostream> #include<cstdio>…
题目地址:https://www.luogu.org/problemnew/show/P1032 洛谷训练场BFS的训练题呀. “BFS不就是用队列的思想去遍历一切情况嘛.我已经不是小孩子了,我肯定能做出来!” A FEW MINUTES LATER “QAQ我错了,这题怎么用BFS的思想呀.” 毫无头绪的我选择向题解求助. /学习从来就不是一件容易的事情,但这可以做成一件让自己快乐的事情/ 耐下心来,仔细阅读以及翻资料,终于看明白了ShawnZhou大牛的代码(以下粘贴的代码均是ShawnZh…
感觉这个题用一些常用的stl和string函数会非常简单..(难道就是考这两个的吗? vector<pair<string,string>>pos//用于变化 map<string,int>bj//用于判重 然后字串变化操作用 string的find+substr函数就可以解决 贴一下代码 #include<bits/stdc++.h> #define rep(a,b,c) for(int a=b;a<=c;a++) #define per(i,n,a…
题目传送门 不同字串个数 题目背景 因为NOI被虐傻了,蒟蒻的YJQ准备来学习一下字符串,于是它碰到了这样一道题: 题目描述 给你一个长为N的字符串,求不同的子串的个数 我们定义两个子串不同,当且仅当有这两个子串长度不一样 或者长度一样且有任意一位不一样. 子串的定义:原字符串中连续的一段字符组成的字符串 输入输出格式 输入格式: 第一行一个整数N 接下来一行N个字符表示给出的字符串 输出格式: 一行一个整数,表示不一样的子串个数 输入输出样例 输入样例#1: 5 aabaa 输出样例#1: 1…
真是一个三倍经验好题啊. 我们来观察这个题目,首先如果直接整体计算,怕是不太好计算. 首先,我们可以将每个子串都看成一个后缀的的前缀.那我们就可以考虑一个一个后缀来计算了. 为了方便起见,我们选择按照字典序来一次插入每个后缀,然后每次考虑当前后缀会产生的新串和与之前插入的串重复的串(这里之所以可以这么考虑,是因为如果他会对后面的串产生重复的话,那么会在后面那个串加入的时候计算的) 那么我们考虑,一个排名为\(i\)的后缀,插入之后不考虑重复的话,会新增多少个子串呢? 不难发现是\(n-sa[i]…
题面 传送门 题解 字符串就硬是要和数据结构结合在一起么--\(loj\)上\(rk1\)好像码了\(10k\)的样子-- 我们设\(L=r-l+1\) 首先可以发现对于\(T\)串一定是从左到右,能取就取是最优的 我们先用后缀自动机\(+\)线段树合并求出自动机上每一个节点的\(endpos\)集合.如果\(L\)较大的时候,我们考虑二分找到第一个端点,再找下一个--这样在线段树上找的总次数是\({n\over L}\),复杂度为\(O({n\over L}\log n)\) 但是\(L\)较…
题解:普通的 BFS 没什么可说的,字符串处理是这道题的难点,同时需要注意哈希判重. 另外,对于 \(string\) 类来说,学到了一个 push_back((char)) 操作. c++string类详解 代码如下 #include <bits/stdc++.h> using namespace std; int n; string from[6],to[6],st,ed; map<string,bool> mp; struct node{string s;int cnt;};…
P1279 字串距离一看就是字符串dp,然而并不会,骗分之后爆零了.以后dp题要好好想想转移方程.f[i][j]表示是a串选了前i个字符,b串选了前j个字符的距离.显然(QAQ)f[i][j]=min(min(f[i-1][j]+k,f[i][j-1]+k),f[i-1][j-1]+abs(a[i]-b[j])); #include<iostream> #include<cstdio> #include<queue> #include<algorithm>…
Problem 洛谷P1274-魔术数字游戏 Accept: 118    Submit: 243Time Limit: 1000 mSec    Memory Limit : 128MB Problem Description 填数字方格的游戏有很多种变化,如下图所示的4×4方格中,我们要选择从数字1到16来填满这十六个格子(Aij,其中i=1..4,j=1..4).为了让游戏更有挑战性,我们要求下列六项中的每一项所指定的四个格子,其数字累加的和必须为34: 四个角落上的数字,即A11+A14…
[洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起点我们一般称为源点,终点一般称为汇点 内容前置 1.增广路 ​ 在一个网络从源点S到汇点T的一条各边剩余流量都大于0(还能让水流通过,没有堵住)的一条路. 2.分层 ​ 预处理出源点到每个点的距离(每次寻找增广路都要,因为以前原本能走的路可能因为水灌满了,导致不能走了).作用是保证只往更远的地方放水…
本文摘自本人洛谷博客,原文章地址:https://www.luogu.com.cn/blog/cjtb666anran/solution-p5759 \[这道题重在理解题意 \] 选手编号依次为: \(1,2...N\) ( \(N\) 为参赛总人数). 设 \(x_{ij}\) 分别表示编号为 \(i\) 的选手第 \(j\) 项竞赛的成绩 \((1 \le i \le N\),\(1 \le j \le 8)\) .其它指标如下: 第 \(j\) 项竞赛的平均分 $ avg_j = \fra…
题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队):一支炮兵部队在地图上的攻击范围如图中黑色区域所示(我就不贴图) 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格.图上其它白色网格均攻击不到.从图上可见炮兵的攻击范围不受…
不会并查集的话请将此文与我以前写的并查集一同食用. 原题来自洛谷 原题 文字稿在此: 题目背景 现代的人对于本家族血统越来越感兴趣. 题目描述 给出充足的父子关系,请你编写程序找到某个人的最早的祖先. 输入输出格式 输入格式: 输入由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系中父亲只有一行,儿子可能有若干行,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字:接下来用?name的形式表示要求该人的最早的祖先:最后用单独的一个$表示…
想要深入学习树形DP,请点击我的博客. 本题的DP模型同 P1352 没有上司的舞会.本题的难点在于如何把基环树DP转化为普通的树上DP. 考虑断边和换根.先找到其中的一个环,在上面随意取两个点, 断开这两个点的边,使其变为一棵普通树.以其中的一点为树根做树形DP,再以另一点为树根再做一次树形DP,因为相邻的两点不能同时选,所以最后统计一下 \(f(i)(0)\) 与 \(g(j)(0)\) 的最大值即可. 定义 \(f(i)(0/1)\) 为第一次树形DP的 \(i\) 点的最优解,\(g(i…
每日一题 day24 打卡 Analysis 字符串+dp 仔细观察发现,对于f[i][j],它的值为以下三个值中的最小者: f[i-1][j]+k //a[i]对应空格 f[i][j-1]+k //b[j]对应空格 f[i-1][j-1]+abs(a[i-1]-b[j-1])// a[i]对应b[j] 我们就得出了动态转移方程,而最终答案就在f[a的长度][b的长度]里. 除此之外,只需注意初始化即可. #include<iostream> #include<cstdio> #i…
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符. 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其他任意字符之间的距离为已知的定值K,空格字符与空…
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符. 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总 和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其他任意字符之间的距离为已知的定值K,空格字符与…
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符. 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其他任意字符之间的距离为已知的定值K,空格字符与空…
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符. 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其他任意字符之间的距离为已知的定值K,空格字符与空…
题目链接:https://www.rqnoj.cn/problem/514 题意: 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串”abcb_cd”,”_a_bcbcd_”和”abcb_cd_”都是X的扩展串,这里“_”代表空格字符. 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的…
正解:AC自动机+最短路 解题报告: 传送门! 这题之前考试考到辣,,,我连题目都没看懂这种傻逼事儿就不要说了QAQ 然后就港正解辣 首先这题可以用dp做?等下写 但是一般来说看到这种,第一反应就,先建个AC自动机呗 然后建完之后想怎么做呢 又有两个方法,分别港下 法一,最短路+dfs 首先想怎么样会变短呢,就是假如fail指针指向了某个串的中间一个节点,那么这个串的前面一段就可以省掉了,然后就变短了,是趴 那要保证最短,就可以直接在trie图上跑个最短路(要用spfa因为有环) 然后关于字典序…
题目链接 因为题目说输入保证会交头接耳的同学前后相邻或者左右相邻,所以一对同学要分开有且只有一条唯一的通道才能把他们分开. 于是可以吧这条通道累加到一个数组里面.应为题目要求纵列的通道和横列的通道条数有限制,所以我们用贪心,将数据存入结构体在根据每一条线隔开的同学对数排序,得出前k条横线和前l条纵线就是要分割的通道. 因为题目要求输出按照\(a_i<a_{i+1}\),\(b_i<b_{i+1}\). 所以我们在根据\(a_i\)和\(b_i\)从小到大排序. 上代码 #include<…
这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简单 的DP,相信大家也可以很容易地吧DP状态转移方程给推出来.我就献丑给大家推一遍,如有错漏,请留言,谢谢. 我们可以定一个函数 \(f(i)\) ,它表示跳到 \(i\) 棵树上去的 \(f(i)\) 的劳累值.由题可知,可以 \(i-v,i-v+1,i-v+2,......i-2,i-1\) 棵…
别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如果被加过了就在前面去掉 具体看代码(题目毒瘤导致卡常卡了好几遍): #include<bits/stdc++.h> #define rint register int #define lowbit(x) (x&(-x)) using namespace std; ],a[],vis[],o…
这道题告诉我,背的掉板子并不能解决一切问题,理解思想才是关键,比如不看题解,我确实想不清楚这题是弗洛伊德求最短路 (我不该自不量力的说我会弗洛伊德了我错了做人果然要谦虚) 灾后重建 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄. 题目描述 给出B地区的村庄数N,村庄编号从0到N-1,和所有M条公路的长度,公路是双向…
题面 本人用的是暴力分类讨论 + \(unordered\_map\) 存储,与所有的题解都不同. 因为 \(n \leq 6\) ,非常的小,并且我不想写 DFS,所以直接暴力分类讨论 \(n=1,n=2,\dots,n=6\) 的情况. 当 \(n \leq 3\) 时,可以用循环嵌套来解决,这里就不再赘述了. 当 \(n > 3\) 时,暴力循环去做的时间复杂度达到了 \(O(m^n)\) ,无法通过本题,所以考虑优化(以 \(n=6\) 为例,其余类推):先枚举 \(x_1,x_2,x_…
qwq真的是一道好题qwq自己做基本是必不可能做出来的. 首先,如果这个题目只是求一个\(f\)数组的话,那就是一道裸题. 首先,根据样例 根据题目描述,我们能发现其实同样数字的不同排列,也是属于不同的方案的,那统计起来其实方便很多. 首先我们发现,对于\(i\)这个数,他可以拆出来\([1,m]\)任何一个数,接在对应的\(f[i-1]到f[i-m]\) 也就是说\(f[i]=f[i-1]+f[i-2]+f[i-3]....f[i-m]\) qwq那我们可以构造出转移矩阵 以\(m=3\)为栗…
题目传送门 题目描述: 读入字符串,求该串的最大字典序子序列. 我的思路: 循环判断只要当前字符比后面所有的字符的字典序大,就把这个字符存到另一个字符串中,最后和输入的字符串循环比较如果该字符和输入时的是相同的,就输出. 注意: 因为比较字符串的字典序是要从第一个字符开始依次往后比较的,所以要想取到最大字典序子序列,就要倒着查找! Code: #include <bits/stdc++.h> //万能头文件 using namespace std; string st; char t[1000…
题意 Link 求 \[\sum_{i=1}^{2^n}\log_2\left(\prod_{j=1}^i\operatorname{lowbit}(j)\right) \] \(n\le 2^{64}\) . 题解 Update. 好像有更简单做法 . 有趣题 . 首先这个 \(\log\) 可以丢到里面去吧 \[\sum_{i=1}^{2^n}\sum_{j=1}^i\log_2(\operatorname{lowbit}(j)) \] 然后这个 \(\log_2(\operatorname…