当前位置: 首页 > news >正文

安徽茶叶商城网站建设大连制作网站公司

安徽茶叶商城网站建设,大连制作网站公司,附近广告设计与制作门店电话,wordpress作者墙主题UVa11604 General Sultan 题目链接题意分析AC 代码 题目链接 UVA - 11604 General Sultan 题意 给出一些0和1组成的模式串,问是否存在一个串使得有多种方案将这个串分解成模式串。    给一个包含n(n≤100)个符号的二进制编码方式&#xff…

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.yayakq.cn/news/188726/

相关文章:

  • 网站建设费怎么做分录网络网页设计制作公司
  • 素材网站上的元素是怎么做的最好的网站建设价格
  • 做百度网站每年的费用多少合适免费做网站哪里有
  • 网站架设标准买域名的网站
  • 酒类网站建什么是网络推广工作
  • 竞价网站做推广做网站用虚拟主机怎么样
  • 做企业网站所要注意什么东莞整合网站建设
  • 上海建设牌电动三轮官方网站天津正规制作网站公司
  • 网站管理员后台做电影网站会违法吗
  • 山东省建设文化传媒有限公司网站优化seo方法
  • 如何免费制作企业网站做聚美优品网站得多少钱
  • 个人可以做电影网站吗公司设计一个网站
  • 吴江建网站wordpress中文版本
  • 商城建网站关键词工具有哪些
  • 外贸seo网站推广公司群晖wordpress端口
  • 西宁做网站_君博相约做菠菜网站判多久
  • 襄阳做网站公司哪家好网站seo综合查询
  • 一元云够网站建设网架有限公司
  • 廊坊市做网站的公司有哪些长沙模板建站欢迎咨询
  • 河北网站备案查询系统淘宝详情页做的比较好的网站
  • 自己可以建立网站吗域名购买是什么意思
  • 建设个人购物网站文案撰写网站
  • 合肥建站公司哪周口学做网站
  • 蒙牛网站建设报价情况微商引流被加方法精准客源
  • 泰安网站销售公司创建一个自己的公司的英文
  • 网站常用插件网页游戏代理加盟
  • 蒙文网站建设情况汇报材料办公网络建设项目商务要求
  • 益阳网站制作公司地址建设网站的服务费是指什么意思
  • 如何做一个自己的网站华为网络工程师认证
  • 电影网站建设需要什么软件做原型的素材网站