【CodeVS】1018 单词接龙
2015-07-03 16:10
295 查看
【分析】
先求出任意两个之间的公共长度。
注意由于单词接龙要求最长,所以两个之间的公共长度用最短的。
这道题所谓的包含不清晰,实际应该是指最短的相交部分不包括所有的,而不是最长的相交部分。
然后dfs,注意每个可以使用两次。
【小结】
有本题看出我思维的不严谨性。
①审题:2次
②没考虑特殊情况。
检查程序的鲁棒性,首先是极致,然后是自己想的一些古怪的数据,如本题自己和自己连结呢?
【代码】
先求出任意两个之间的公共长度。
注意由于单词接龙要求最长,所以两个之间的公共长度用最短的。
这道题所谓的包含不清晰,实际应该是指最短的相交部分不包括所有的,而不是最长的相交部分。
然后dfs,注意每个可以使用两次。
【小结】
有本题看出我思维的不严谨性。
①审题:2次
②没考虑特殊情况。
检查程序的鲁棒性,首先是极致,然后是自己想的一些古怪的数据,如本题自己和自己连结呢?
【代码】
#include <cstdio> #include <cstring> #include <cstdlib> using namespace std; const int N=21; const int L=300; int n,len ; char s [L]; int mix ; char a; int v ,c,rc; inline int min(int i,int j) { return i<j?i:j; } int getmix(int x,int y) { int mxlen=min(len[x],len[y]),i,j; for (i=1;i<=mxlen;i++) { for (j=1;j<=i;j++) if (s[x][len[x]-i+j]^s[y][j]) break; if (j==i+1) return i; } return 0; } inline int max(int i,int j) { return i>j?i:j; } void dfs(int now) { int tag=0; v[now]++; for (int nxt=1;nxt<=n;nxt++) if (v[nxt]<2&&mix[now][nxt]&&mix[now][nxt]!=len[now]&&mix[now][nxt]!=len[nxt]) { c+=len[nxt]-mix[now][nxt]; dfs(nxt),tag=1; c-=len[nxt]-mix[now][nxt]; } v[now]--; if (!tag) rc=max(rc,c); } int main(void) { scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%s",&s[i][1]),len[i]=strlen(&s[i][1]); scanf("\n%c",&a); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) mix[i][j]=getmix(i,j); for (int i=1;i<=n;i++) if (s[i][1]==a) c=len[i],dfs(i),c=0; printf("%d\n",rc); return 0; }
相关文章推荐
- 二分匹配 月老的难题
- OpenCV之六 创建Trackbar 图像对比度、亮度值调整
- 屏蔽/禁止双击选中文字
- sgu148: B-Station
- 设计模式之单例模式
- 【Android】内存卡图片读取器,图库app
- 提高开发效率的14个Xcode中常用的快捷键操作
- [华为机试练习题]43.在字符串中找出连续最长的数字串
- sql触发器
- Servlet深入之请求HttpServletRequest
- php soap实例讲解
- 求一个整形数组的最大元素
- 2. CSS 结构
- RCNN的安装与简单使用
- QT简介
- hdu 2871 Memory Control(成段更新,区间合并)
- ffmpeg(7):将h264编码的视频流保存为BMP或者JPEG图片
- zookeeper 存储之文件格式分析
- Hibernate 的HQL,QBC 查询语言
- ddms(基于 Express 的表单管理系统)源码学习