博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3192
阅读量:6677 次
发布时间:2019-06-25

本文共 1308 字,大约阅读时间需要 4 分钟。

把所有串全排列,每次排列按顺序从左到右将各串叠加起来,叠加过程遵循最短原则。

search(f, f+n, g, g+m);在f中查找g,返回第一个与g完全匹配的起始位置,若无法匹配则返回f+m。

copy(f,f+n,g);将f中的n个元素拷贝到g中。

View Code
#include 
#include
#include
#include
#include
using namespace std;#define maxn 10#define maxl 10int n;char word[maxn][maxl];int f[maxn];char ans[maxn * maxl];void input(){ scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%s", word[i]);}void add(char *a, char *b){ int len_a = strlen(a); int len_b = strlen(b); if (search(a, a + len_a, b, b + len_b) != a + len_a) return; for (int i = max(0, len_a - len_b); i <= len_a; i++) { bool ok = true; for (int j = 0; j < len_a - i; j++) if (a[i + j] != b[j]) { ok = false; break; } if (ok) { copy(b, b + len_b + 1, a + i); return; } }}int main(){ //freopen("t.txt", "r", stdin); input(); for (int i = 0; i < n; i++) f[i] = i; int len = maxn * maxl; do { ans[0] = 0; for (int i = 0; i < n ;i++) add(ans, word[f[i]]); len = min(len, (int)strlen(ans)); }while (next_permutation(f, f + n)); printf("%d\n", len); return 0;}

转载地址:http://jjyao.baihongyu.com/

你可能感兴趣的文章
Docker创建虚机和swarm
查看>>
JSON入门学习
查看>>
一个很好的UML工具
查看>>
[转]无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues...
查看>>
函数Curry化
查看>>
二进制补码,原码,反码和移码
查看>>
Default Constructor 的建构操作
查看>>
函数中的不定长参数研究 *and**
查看>>
hive如何执行mr
查看>>
测试及等等
查看>>
通过Python来操作kylin
查看>>
模板 数据结构
查看>>
【Search a 2D Matrix】cpp
查看>>
POJ 1741 Tree(树的点分治,入门题)
查看>>
Opencv3.1.0 & Win10/Win7 64位 contrib编译
查看>>
黄聪:FFmpeg 使用指南
查看>>
C#:CodeSmith根据数据库中的表创建C#数据模型Model + 因为没有钱买正版,所以附加自己写的小代码...
查看>>
乐视4.14硬件免费日de用户体验
查看>>
C — 对C语言的认识
查看>>
linkin大话数据结构--Set
查看>>