NOI2.5 8783:单词接龙
来源:互联网 发布:php 自己开发mvc框架 编辑:程序博客网 时间:2024/05/19 17:08
单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和atide间不能相连。
5attouchcheatchoosetacta
23
连成的“龙”为atoucheatactactouchoose
首先,字符串接龙这种东西,是非常恶心的,其次,处理接头的地方也不好做,最后,每个单词还可以访问两次,这也是个麻烦的地方。
思路:先运用深搜来作为主要核心,在单独写一个函数处理字符串,先直接加上总长度,重复的长度也加上,再输出二者的差就OK O(∩_∩)O~
PS:
如果你一直是五分,看看你有没有考虑以下问题:
1、看看每个字符串是否起到最大作用。
2、比如“adcd”和“dcde”,最大可以组合成“adcdcde”,而不是“adcde”
AC代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char a[21][21],c[20];int k,v[21],n;int check(int p,int q){bool eee;int i,j,o,pl=strlen(a[p]),ql=strlen(a[q]);for(i=1;i<min(pl,ql);i++){eee=0;for(j=pl-i,o=0;j<pl;o++,j++)if(a[p][j]!=a[q][o])eee=1;if(!eee)return i;}return 0;}void find(int s,int ss,int x){int i,sss;for(i=0;i<n;i++)if(v[i]<2){sss=check(x,i);if(sss){v[i]++;find(s+strlen(a[i]),ss+sss,i);v[i]--;}}if(s-ss>k)k=s-ss;}int main(){int i;scanf("%d",&n);for(i=0;i<n;i++)scanf("%s",a[i]);scanf("\n%c",&c[0]);for(i=0;i<n;i++)if(a[i][0]==c[0]){v[i]=1;find(strlen(a[i]),1,i);v[i]=0;}printf("%d",k+1);}
3 1
- NOI2.5 8783:单词接龙
- 【NOI OJ】8783 单词接龙
- OpenJudge 2.5-8783 单词接龙
- noip2000-单词接龙2008.11.5
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- 单词接龙
- java环境变量配置
- BZOJ 2754 [SCOI2012]喵星球上的点名
- eclipse如何添加svn插件?
- Qt如何加入Objective-C代码(包含如何查找Objective-C的库)
- 直播技术选型
- NOI2.5 8783:单词接龙
- Fibonacci
- 输入法把底部导航栏顶上去
- C#把内存里的utf8字符串转成C#内部使用的Unicode
- 【bzoj1034】[ZJOI2008]泡泡堂BNB
- SpringMVC文件上传
- 常用shell命令
- Android之AIDL
- mongoose $where、find查询