UVa11604 General Sultan

UVa11604 General Sultan

  • 题目链接
  • 题意
  • 分析
  • AC 代码

题目链接

   UVA - 11604 General Sultan

题意

   给出一些0和1组成的模式串,问是否存在一个串使得有多种方案将这个串分解成模式串。
   给一个包含n(n≤100)个符号的二进制编码方式,是否存在一个二进制序列,存在至少两种解码方法。比如{a=01, b=001, c=01001}是有歧义的,因为01001可以解码为a+b或者c。每个编码由不超过20个0或1组成。

分析

   很好的一道图论建模题目!思路来自于HouseFangFZC的博文。
   先看一个两种方案去拼接形成同一个串的图:
UVa11604 General Sultan
   可以发现总是一个方案新追加的串和另一个方案当前未匹配部分做匹配,并且其中一者完全匹配掉,另一者有剩余部分(或者另一者也匹配完,即找到了两种不同拼接方案)。
   将每个模式串的每一个字符看成一个结点,并额外增加起点s、终点t两个虚拟结点。首先起点与每个模式串的首字母连一条有向边。对于第i个模式串,考虑其第 h i h_i hi个字符开始的子串(对应节点u),若其与第j个模式串做匹配(注意 h i = 0 h_i=0 hi=0时, j ≠ i j\ne i j=i)满足至少一者匹配到结尾,则连有向边,分三种情况:若两者都匹配完,则 u → t u\rightarrow t ut;若模式串j的首个未匹配字符是 h j h_j hj(对应节点v),则 u → v u\rightarrow v uv;若子串 h i h_i hi的首个未匹配字符是 h x h_x hx(对应节点w),则 u → w u\rightarrow w uw
   有向图建完后,跑一遍dfs,看起点s能否到达终点t就能解决问题。

AC 代码

#include <iostream>
#include <cstring>
using namespace std;#define L 22
#define N 101
int g[N*L][N*L], c[N*L], e[N], t[N], m, n, kase = 0; char s[N][L], tmp[L]; bool vis[N*L];int common(int i, int h, int j) {int k = 0;while (h < e[i]) {if (s[i][h] != s[j][k]) return k;++h; ++k;}return k;
}bool dfs(int u = 0) {if (u == m) return true;vis[u] = true;for (int i=0, v; i<c[u]; ++i) if (!vis[v = g[u][i]] && dfs(v)) return true;return false;
}void solve() {memset(c, 0, sizeof(c)); memset(vis, 0, sizeof(vis));for (int i=0; i<n; ++i) cin >> tmp >> s[i], e[i] = strlen(s[i]), g[0][c[0]++] = t[i] = i<1 ? 1 : t[i-1] + e[i-1];m = t[n-1] + e[n-1];for (int i=0; i<n; ++i) for (int j=0; j<e[i]; ++j) for (int k=0; k<n; ++k) {if (i==k && j==0) continue;int cc = common(i, j, k), u = t[i]+j;if (cc == e[k] && cc+j == e[i]) g[u][c[u]++] = m;else if (cc < e[k] && cc+j == e[i]) g[u][c[u]++] = t[k] + cc;else if (cc == e[k] && cc+j < e[i]) g[u][c[u]++] = u + cc;}cout << "Case #" << ++kase << (dfs() ? ": Ambiguous." : ": Not ambiguous.") << endl;
}int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);while (cin >> n && n) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19279.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自学SPSS,有哪些教学视频或书籍推荐?

书籍推荐 经过长达八年的不断迭代与优化&#xff0c;SPSSAU的用户群体已经远超简单的数据分析层面&#xff0c;而是逐步深入到了学术研究的精髓之中。如今&#xff0c;无论是在SCI、EI等国际权威学术期刊&#xff0c;还是北大核心期刊、CSSCI等国内顶尖学术期刊上&#xff0c;…

leetCode.87. 扰乱字符串

leetCode.87. 扰乱字符串 题目思路&#xff08;该方法以前可以过&#xff0c;现在对时间复杂度的要求严格了许多&#xff0c;不能过去&#xff09;&#xff1a; 这里显示&#xff0c;能够让我自己后期复习的时候&#xff0c;可以掌握最基本的做法&#xff08;尽管不能通过全部样…

vue开发 使用element的el-pagination分页组件

一、代码实现 实现思路&#xff1a;获取到列表的所有数据&#xff0c;然后对数据进行处理&#xff0c;紧接着操作分页。 特别注意的是&#xff1a;必须要求后端返回一个数据的总条数total &#xff01;&#xff01;&#xff01; <template><div class"home"…

wangEditor富文本实现自定义插入数据(手把手)

插件版本如下: vue2版本 “@wangeditor/editor”: “^5.1.23”, “@wangeditor/editor-for-vue”: “^1.0.2”, 文件截图如下: 一、plugins/index.js 入口文件,整合模块导出外部使用 import withMention from ./plugin import renderElemConf from ./render-elem import …

5月29日,每日信息差

第一、据悉&#xff0c;微信视频号直播电商团队将并入到微信开放平台&#xff08;小程序、公众号等&#xff09;团队&#xff0c;原微信视频号直播电商团队转由微信开放平台负责人负责。知情人士表示&#xff0c;此次调整&#xff0c;将有助于微信视频号直播电商业务更好地融入…

《Multiple View Geometry in Computer Vision》中的Lemma A4.2证明

这个公式是cross product的的identity under matrix transformations: ( M x ) ( M y ) M ∗ ( x y ) \left( Mx \right) \times \left( My \right) M^*\left( x\times y \right) (Mx)(My)M∗(xy) M ∗ M^* M∗为M的伴随矩阵 下面这个证明方法是借鉴了Cross product: mat…

重庆耶非凡科技选品师项目大揭秘:成功背后的故事与经验

在电商行业迅猛发展的今天&#xff0c;选品师这一职业愈发受到市场的关注。重庆耶非凡科技有限公司凭借其专业的选品团队和科学的选品方法&#xff0c;成为众多商家关注的焦点。那么&#xff0c;该公司的选品师项目是否真的有成功的案例呢?接下来&#xff0c;我们将从多个角度…

深度学习——卷积神经网络

卷积神经网络 1.导入需要的包2.数据导入与数据观察3.卷积层4.汇聚层最大汇聚 平均汇聚全局平均汇聚 5.搭建卷积神经网络进行手写数字识别导入并对数据进行预处理搭建卷积神经网络 6.利用函数式API与子类API搭建复杂神经网络残差层 1.导入需要的包 numpy as np: NumPy是一个用于…

Pytorch深度学习实践笔记4(b站刘二大人)

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;pytorch深度学习 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 视频来自【b站刘二大人】 1 反向传播 Back propaga…

FFMPEG+ANativeWinodow渲染播放视频

前言 学习音视频开发&#xff0c;入门基本都得学FFMPEG&#xff0c;按照目前互联网上流传的学习路线&#xff0c;FFMPEGANativeWinodow渲染播放视频属于是第一关卡的Boss&#xff0c;简单但是关键。这几天写了个简单的demo&#xff0c;可以比较稳定进行渲染播放&#xff0c;便…

【运维】Linux 端口管理实用指南,扫描端口占用

在 Linux 系统中&#xff0c;你可以使用以下几种方法来查看当前被占用的端口&#xff0c;并检查 7860 到 7870 之间的端口&#xff1a; 推荐命令&#xff1a; sudo lsof -i :7860-7870方法一&#xff1a;使用 netstat 命令 sudo netstat -tuln | grep :78[6-7][0-9]这个命令…

全球痛风年轻化趋势明显 别嘌醇制剂需求增多

全球痛风年轻化趋势明显 别嘌醇制剂需求增多 别嘌醇制剂包括片剂和缓释胶囊两种剂型&#xff0c;别嘌醇片剂吸收快&#xff0c;可能会出现胃肠道反应&#xff1b;别嘌醇缓释胶囊释放比较缓慢&#xff0c;作用更持久&#xff0c;对胃肠道损害比较小。别嘌醇制剂是抑制尿酸合成的…

【CSDN唯一】Python解析.dwg格式文件信息提取

目录 一、装环境1、下载 ODAFileConverter2、安装 ODAFileConverter(1)、安装 gdebi 来处理依赖关系(2)、使用 gdebi 安装 DEB 包 3、解决 libxcb库问题(1)、安装依赖(2)、确认 libxcb-util.so.1 是否存在(3)、创建符号链接 4、安装python包 二、上代码 一、装环境 这里搞的人…

Java内存空间

Java内存空间划分 Java虚拟机在执行Java程序的过程中会把他管理的内存划分为若干个不同的数据区域&#xff0c;如图所示1.7和1.8两个版本的Java内存空间划分。 JDK1.7: JDK1.8: 线程私有&#xff1a; 程序计数器虚拟机栈本地方法栈 线程共享 &#xff1a; 堆方法区直接内…

股价飙升:AI PC大变革,联想的“联想时刻”正在缔造?

按照产业的传导逻辑&#xff0c;在颠覆式技术到来之时&#xff0c;当引发这场变革的最核心技术及产品真正进入了产品化、商业化阶段&#xff0c;此时直触需求端的终端厂商&#xff0c;其成长性估算将得到市场的重新预估。 眼下AI PC之于联想就是如此。 5月27日&#xff0c;联…

SPI协议的基本介绍

1. 基本介绍 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是一种高速、全双工、同步的通信协议&#xff0c;主要用于微控制器和各种外部硬件或外设之间的通信&#xff0c;例如传感器、SD卡、液晶显示屏等。 SPI协议由四根线组成&#xff1…

mysql中InnoDB的统计数据

大家好。我们知道&#xff0c;mysql中存在许多的统计数据&#xff0c;比如通过SHOW TABLE STATUS 可以看到关于表的统计数据&#xff0c;通过SHOW INDEX可以看到关于索引的统计数据&#xff0c;那么这些统计数据是怎么来的呢&#xff1f;它们是以什么方式收集的呢&#xff1f;今…

正方形 II

描述 正方形是特殊的平行四边形之一。即有一组邻边相等&#xff0c;并且有一个角是直角的平行四边形称为正方形。设a为正方形的边长&#xff0c;s为正方形的面积&#xff0c;c为正方形的周长。 输入 一行&#xff0c;包含一个正整数a&#xff0c;表示正方形的边长。 输出 …

vscode:如何解决”检测到include错误,请更新includePath“

vscode:如何解决”检测到include错误&#xff0c;请更新includePath“ 前言解决办法1 获取includePath路径2 将includePath路径添加到指定文件3 保存 前言 配置vscode是出现如下错误&#xff1a; 解决办法 1 获取includePath路径 通过cmd打开终端&#xff0c;输入如下指令&a…

【第8章】SpringBoot之单元测试

文章目录 前言一、准备1. 引入库2. 目录结构 二、测试代码1. SpringBoot3ApplicationTests2.测试结果 总结 前言 单元测试是SpringBoot项目的一大利器&#xff0c;在SpringBoot我们可以很轻松地测试我们的接口。 一、准备 1. 引入库 <dependency><groupId>org.s…