zoukankan      html  css  js  c++  java
  • Bazinga HDU

    题目:https://vjudge.net/problem/HDU-5510

    $2015ACM/ICPC$ 亚洲区沈阳站

    题目大意:

    输入$t$(表示样例个数)

    如何每个样例一个 $n$,表示字符串的个数。

    接下来 $n$个字符串,题目要求输出一个最大的i,使得对于标号为 $j (1<=j<i)$ 的字符串 $ss[j]$ 不是字符串 $ss[i]$ 的子串。

    思路:

    从最后一个字符串向前枚举,如果对于一个字符串 $ss[i]$,其前面的一个字符串 $ss[i-1]$ 不是 $ss[i]$ 的子串,那么就从 $i+1$ 开始向后寻找最大的不包含 $ss[i-1]$ 的字符串。

    判断子串的过程可以用函数 $strstr(s_1,s_2)$:如果 $s_2$ 不是 $s_1$ 的子串,那么返回 $null$。

    也可以用 $kmp$。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 char ss[505][2005];
     4 int main()
     5 {
     6     int t,n,cas=0;
     7     scanf("%d",&t);
     8     while(t--)
     9     {
    10         scanf("%d",&n);
    11         memset(ss,0,sizeof(ss));
    12         for(int i=1;i<=n;i++)
    13             scanf("%s",ss[i]+1);
    14         int ans=-1;
    15         for(int i=n;i>1;i--)
    16         {
    17             if(!strstr(ss[i]+1,ss[i-1]+1))
    18             {
    19                 ans=max(ans,i);
    20                 for(int j=i+1;j<=n;j++)
    21                 {
    22                     if(!strstr(ss[j]+1,ss[i-1]+1))
    23                         ans=max(ans,j);
    24                 }
    25             }
    26         }
    27         printf("Case #%d: %d
    ",++cas,ans);
    28     }
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    Codeforces 749C【模拟】
    Codeforces 358D【DP】
    Lightoj1122 【数位DP】
    Codeforces 744C【DFS】
    大晚上就是想说说话
    HDU5997 【线段树】
    codeforces743D 【DFS】
    lightoj 1422【区间DP·分类区间首元素的情况】
    lightoj 1125【背包·从n个选m个】
    Lightoj 1147【DP】
  • 原文地址:https://www.cnblogs.com/1024-xzx/p/12013208.html
Copyright © 2011-2022 走看看