zoukankan      html  css  js  c++  java
  • HDU 5510 Bazinga 暴力匹配加剪枝

      思路: 标记每个字符串前面的子串,如果一个字符串a,前面一个是字符串b,b是a的子串,然后就继续往前找,找到字符串c,然后 发现字符串c被标记了,说明c是b的子串,那么c必是a的子串,也可以这样理解如果b是a的子串,那么b的所有子串(即b串前被标记了的字符串)都是a的子串。就这样剪枝。

    #include<stdio.h>
    #include<string.h>
    using namespace std;
    char s[505][2005];
    int vis[505];
    int main()
    {
        int t;
        int icase=0;
        scanf("%d",&t);
        while(t--)
        {
            icase++;
            memset(vis,0,sizeof(vis));
            int n,ans=-1;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                scanf("%s",s[i]);
                for(int j=i-1;j>=1;j--)
                {
                    if(vis[j]) continue;
                    if(strstr(s[i],s[j])==NULL) {ans=i;break;}
                    else
                        vis[j]=1;
                }
            }
            printf("Case #%d: %d
    ",icase,ans);
        }
        return 0;
    }
  • 相关阅读:
    涂鸦
    触发事件续
    触摸事件基本介绍
    背景平铺
    屏幕截图
    图片的裁剪
    图片水印
    UIKit绘图方法
    Java范型学习笔记
    《Head first设计模式》学习笔记
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754998.html
Copyright © 2011-2022 走看看