题目大意:

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

思路:

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

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

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

  那么,将每一个串的每一个字符都看作一个点,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. shell脚本: 备份mysql远程数据库并清除一个月之前的数据

    hxingxing-backup.sh: date="$(date +"%Y-%m-%d")"mysqldump -u root -h localhost -p ...

  2. 报错注入分析之updatexml注入

    PS:今天元旦,家里打来电话说,今年春节要回老家.心里倍感恐惧.可以清楚的感觉得到父母说话的气息没有底气.大概如同我一样是恐惧吧.加油吧!努力赚钱! 先丢一篇很不错的文章:http://www.moo ...

  3. Qt - 读取GPS数据

    1.GPS型号为ublox(EVK-M8L),配有USB接口,Qt版本5.7 2.实现步骤: (1)实现串口通信 采用Qt5.7 内置的串口操作类QSerialPort和QSerialPortInfo ...

  4. MATLAB的PLOT函数线型设置及横坐标为字符串的代码实例

    2.横坐标为字符串的代码实例 cell={‘PLS’,’SVM’,’RF’,’NNET’,’NB’,’PLR’,’C5.0′,’PDA’,’KNN’,’GLM’,’BCT’};%分类方法yData=[ ...

  5. 如何将Sphinx生成的html文档集成进入Django

    参考 http://stackoverflow.com/questions/10594618/django-and-sphinx-how-to-view-the-html-sphinx-generat ...

  6. 三妹,我拆了你的本-- Day One(大图赏)

    从垃圾箱中捡到了三妹的笔记本,虽然显卡已烧,硬盘和内存已被掳走,但依旧很高兴的说,因为我的目的是要拆了它. 这是我的第一次,所以本文的内容完全是新手猎奇,高手勿喷~ 步骤1:拆掉塑料外壳 不要忘了硬盘 ...

  7. java面试题总汇

    coreJava部分 7 1.面向对象的特征有哪些方面? 7 2.作用域public,private,protected,以及不写时的区别? 7 3.String 是最基本的数据类型吗? 7 4.fl ...

  8. 编译osgEarth2.8遇到gdal_vrt.h找不到的问题

    在编译plugins osgearth_gdal的ReaderWriterGDAL.cpp的时候可能会遇到这个问题 gdal_vrt.h这个头文件在gdal-1.11.0\frmts\vrt目录下,从 ...

  9. docker--初体验

    docker这个词已经越来越热,很多docker的概念是从周围人和知乎上看的,打算从功能上先了解docker,深入的话放在以后. ps:正好手头有一台腾讯云的vps,单核,1G内存,可以拿来做实验,腾 ...

  10. AOP 面向切面编程, Attribute在项目中的应用

    一.AOP(面向切面编程)简介 在我们平时的开发中,我们一般都是面对对象编程,面向对象的特点是继承.多态和封装,我们的业务逻辑代码主要是写在这一个个的类中,但我们在实现业务的同时,难免也到多个重复的操 ...