题目大意:

  有若干模式串,将某些模式串拼接起来(一个可以使用多次)形成一个长模式串,判断能否有两种或更多种不同的拼法拼成相同的模式串。

思路:

  神奇的构图,暴力的求解。

  可以发现,若有不同的拼法,则一个模式串的前缀要与一个模式串的后缀相同。

  因此我们就将问题转化成:从两个模式串开始,不停的按照前后缀匹配,最后达到两个串同时在一个点结束。

  那么,将每一个串的每一个字符都看作一个点,n2len2暴力枚举i串从z开始的后缀和j串(自己也可以,但不能让前缀是其本身)的前缀做匹配,看是否能将其中一个串匹配完。

  当(i,z)和j匹配,若i先结束了,则将(i,z)这个点连边到j串没匹配的第一个点,表示下一次匹配应该是从j的那个位置开始当后缀再寻找其他前缀;如果j先结束,与之前一个类似;如果i和j同时结束,则连边到终点。

  最后用dfs判断能否从某个模式串的第一个点开始走到终点。

  PS:1、fromhttp://blog.csdn.net/houserabbit/article/details/38943645

     2、数组的意义、范围要清楚,我花了一个多小时才发现数组开小了。

代码:

 #include<cstdio>
#include<cstring>
using namespace std;
const int M=,N=;
int n,e,t,i,j,k,z,cnt,v[M*M*N*N],id[M][N],nex[M*M*N*N],len[M],head[M*N];
bool vis[M*N],flag;
char s[M][N]; void add(int x,int y) { v[++cnt]=y,nex[cnt]=head[x],head[x]=cnt; } void dfs(int x)
{
if (x==e) { flag=; return; }
vis[x]=;
for (int i=head[x];~i;i=nex[i])
if (!vis[v[i]])
{
dfs(v[i]);
if (flag) return;
}
} int main()
{
while (~scanf("%d",&n))
{
if (!n) break;
e=cnt=flag=;
for (i=;i<=n;++i)
{
scanf("%s%s",s[i],s[i]);
len[i]=strlen(s[i]);
for (j=;j<len[i];++j) id[i][j]=++e;
}
for (++e,i=;i<=e;++i) head[i]=-;
for (i=;i<=n;++i)
for (z=;z<len[i];++z)
for (j=;j<=n;++j)
{
if (i==j && !z) continue;
for (k=;k<len[j] && z+k<len[i];++k)
if (s[i][z+k]!=s[j][k]) break;
if (z+k==len[i] && k==len[j]) add(id[i][z],e);
else if (k==len[j]) add(id[i][z],id[i][z+k]);
else if (z+k==len[i]) add(id[i][z],id[j][k]);
}
for (i=;i<=e;++i) vis[i]=;
for (i=;i<=n;++i)
{
if (!vis[id[i][]]) dfs(id[i][]);
if (flag) break;
}
printf("Case #%d: ",++t);
if (flag) puts("Ambiguous."); else puts("Not ambiguous.");
}
return ;
}

UVA - 11604 General Sultan 题解的更多相关文章

  1. General Sultan UVA - 11604(建图暴力)

    给出n个字符串,询问是否存在一个字符串(可以是给出的几个中的 也可以是组合成的),使得用字符串(随便你用多少个)来拼凑这个串,能够至少有两种拼法 解析: 把每一个字符串的每一个位置的字符看作结点,进行 ...

  2. UVA 167 R-The Sultan's Successors

    https://vjudge.net/contest/68264#problem/R The Sultan of Nubia has no children, so she has decided t ...

  3. Uva 167 The Sultan's Successors(dfs)

    题目链接:Uva 167 思路分析:八皇后问题,采用回溯法解决问题. 代码如下: #include <iostream> #include <string.h> using n ...

  4. uva 167 - The Sultan&#39;s Successors(典型的八皇后问题)

    这道题是典型的八皇后问题,刘汝佳书上有具体的解说. 代码的实现例如以下: #include <stdio.h> #include <string.h> #include < ...

  5. 【Uva 11604 编码都有歧义了】

    ·你的目的就是要让编码有歧义,这就美妙了. ·英文题,述大意:       给出n个模板字符串,询问是否存在一个字符串,使得用模板串(随便你用多少个)来拼凑这个串,能够至少有两种拼法.如果有,就输出“ ...

  6. UVa 202 Repeating Decimals 题解

    The decimal expansion of the fraction 1/33 is 0.03, where the 03 is used to indicate that the cycle ...

  7. UVA 10924 Prime Words 题解

    Prime Words A prime number is a number that has only two divisors: itself and the number one. Exampl ...

  8. UVA 10852 Less Prime 题解

    Less Prime Let n be an integer, 100 n 10000, nd the prime number x, x n, so that n

  9. UVA 10537 The Toll! Revisited uva1027 Toll(最短路+数学坑)

    前者之所以叫加强版,就是把uva1027改编了,附加上打印路径罢了. 03年的final题哦!!虽然是水题,但不是我这个只会做图论题的跛子能轻易尝试的——因为有个数学坑. 题意:运送x个货物从a-&g ...

随机推荐

  1. Dotnet文件格式解析

    0x0.序 解析过程并没有介绍对pe结构的相关解析过程,网上此类相关资料很多可自行查阅,本文只介绍了网上资料较少的从pe结构的可选头中的数据目录表中获取dotnet目录的rva和size,到完全解析d ...

  2. 用递归调用实现字符串反转(java版)

    写一个函数,输入int型,返回整数逆序后的字符串.如:输入123,返回“321”. 要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串. public static String re ...

  3. Js计算当前日,当前周开始结束时间,当前月份,当前年份

    <script type="text/javascript"> //日期加上天数后的新日期. function GetDateStr(AddDayCount) { va ...

  4. PXE+Kickstart+DHCP+TFTP实现无人值守安装操作系统

    PXE+Kickstart+DHCP+TFTP实现无人值守安装操作系统 PXE + Kickstart PXE的工作流程及配置文件 Kickstart的配置文件 Linux安装大致可以分为2个阶段 第 ...

  5. 函数mod(a,m)

    Matlab中的函数mod(a,m)的作用: 取余数 例如: mod(25,5)=0; mod(25,10)=5; 仅此.

  6. C#接口的作用(经典)

    C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体实现的代码,然后在继承该接口的类里面要实现接口的所有方法的代码,但没有真正认识到接口的作用的时候就 ...

  7. mysql‘事件计划已关闭。事件只能在服务器启动并开启事件计划时才能处理。'的警告

    通过下列语句查询event是否开启 show variables like '%sche%'; 通过执行下列语句,来开启event_schedulerset global event_schedule ...

  8. tornado中将cookie值设置为json字符串

    不熟悉,找了很久,能FQ的话, https://groups.google.com/forum/#!topic/python-tornado/9Y--NgwjP_w 2楼有解释. tornado.es ...

  9. selenium web driver 使用JS修改input属性

    selenium获取input时候,发现type=”hidden” 的input无法修改value,经牛人指点,可以使用js修改 首先html源文件如下,设置为text .hidden.submit ...

  10. Percona XtraBackup 备份原理说明【转】

    本文来自:http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MyS ...