HDU5510Bazinga(暴力剪枝)
2015-11-04 20:15
393 查看
题意:问是否存在最大的j在j之前的字符串中有一个不是j的子串,
思路,剪枝:如果一个串已经是某个串的子串,下次就可以不用再检查他了,还有一个,如果这个串前有比他长的串,那么就可以直接判断是ok的
思路,剪枝:如果一个串已经是某个串的子串,下次就可以不用再检查他了,还有一个,如果这个串前有比他长的串,那么就可以直接判断是ok的
#include<bits/stdc++.h> using namespace std; #define LL long long #define pb push_back #define cl(a,b) memset(a,b,sizeof(a)) const int maxn=2005; const int inf=1<<23; char a[501][2005]; int len[2005]; bool vis[maxn]; int mxc[maxn]; int main(){ int T; int cas=1; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s",a[i]); mxc[i]=len[i]=strlen(a[i]); vis[i]=0; } len[0]=0;int mx=0; for(int i=2;i<=n+1;i++){ if(mx<len[i-1])mx=len[i-1]; mxc[i]=mx; } //for(int i=1;i<=n;i++)printf("%d ",mxc[i]); printf("Case #%d: ",cas++); int flag=0; for(int i=1;i<=n;i++){ if(mxc[i]>len[i]){ flag=i;continue; } for(int j=i-1;j>=1;j--){ if(vis[j]) continue; if(strstr(a[i],a[j])==NULL){ flag=i; } else vis[j]=1; } } if(flag){ printf("%d\n",flag); } else { printf("-1\n"); } } return 0; }
相关文章推荐
- 大数据环境下的云计算与物联网
- 流式计算的理论与技术
- 关于LinearLayout中的weight的属性
- flash乱码解决方案
- 2015ACM/ICPC亚洲区长春站 E hdu 5531 Rebuild
- Language Tool ,a plugin for TeXStudio
- 设计模式六大原则(6)-开闭原则
- zcmu1540 第k大数
- swift 快速奔跑的兔几 本节的内容是:绘画第二讲~
- Android Graphics Pipeline: From Button to Framebuffer (Part 1)
- RecyclerView的布局样式
- 偶遇两个好博客
- 设计模式六大原则(5)-迪米特法则
- 正式入驻CSDN
- HDU 4127 Flood-it!(IDA*)
- 优化表空间扩展过于频繁 insert select 性能
- Javascript面试题
- 黑马程序员—Java基础—IO2
- Android 二维码编程
- 知乎上不够伪善的内容