码迷,mamicode.com
首页 > 其他好文 > 详细

(BC 一周年)hdu 5311 Hidden String

时间:2015-07-29 00:42:49      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

Hidden String

 
 Accepts: 437
 
 Submissions: 2174
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 262144/262144 K (Java/Others)
问题描述
今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为nn的字符串ss. 他想要知道能否找到ss的三个互不相交的子串s[l_1..r_1]s[l?1??..r?1??], s[l_2..r_2]s[l?2??..r?2??], s[l_3..r_3]s[l?3??..r?3??]满足下列条件:

  1. 1 \le l_1 \le r_1 < l_2 \le r_2 < l_3 \le r_3 \le n1l?1??r?1??<l?2??r?2??<l?3??r?3??n

  2. s[l_1..r_1]s[l?1??..r?1??], s[l_2..r_2]s[l?2??..r?2??], s[l_3..r_3]s[l?3??..r?3??]依次连接之后得到字符串"anniversary".
输入描述
输入有多组数据. 第一行有一个整数TT (1 \le T \le 100)(1T100), 表示测试数据组数. 然后对于每组数据:

一行包含一个仅含小写字母的字符串ss (1 \le |s| \le 100)(1s100).
输出描述
对于每组数据, 如果Soda可以找到这样三个子串, 输出"YES", 否则输出"NO".
输入样例
2
annivddfdersewwefary
nniversarya
输出样例
YES
NO

比赛的时候没做出来,sad
我发现我有一个问题,就是不敢跑暴力
有不少题其实正解就是暴力
或者有的题,暴力不是标解,但是绝对可A,可我就不敢写...
就觉得不会是这样..
说到底还是不自信吧...

思路是枚举两个间隔点,将 string tar="anniversary"分成三个不为空的部分
然后在给的字符串中按顺序查找这三部分
如果都能找到,直接YES
如果任何一种间隔的分段都无法YES 就NO...

妈蛋,if语句后面多写了个分号,调了半个多小时才发现(为啥总是这种傻逼错误....)
还有一点,因为是多组数据,而对于每组数据,将tar拆分的方法都是一样的,可以先预处理一下存到数组里.
 /*************************************************************************
    > File Name: code/bc/#ann/1002.cpp
    > Author: 111qqz
    > Email: rkz2013@126.com
    > Created Time: 2015年07月25日 星期六 18时54分35秒
 ************************************************************************/

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<stack>
#define y0 abc111qqz
#define y1 hust111qqz
#define yn hez111qqz
#define j1 cute111qqz
#define tm crazy111qqz
#define lr dying111qqz
using namespace std;
#define REP(i, n) for (int i=0;i<int(n);++i)
typedef long long LL;
typedef unsigned long long ULL;
const int N=1E2+5;
int d[N];
int len;
int cnt;
string st,tar,s1[N],s2[N],s3[N];
bool flag;

void solve (string x,string y,string z)
{
  //  cout<<x<<"+"<<y<<"+"<<z<<endl;
    int lx = x.length();
    int ly = y.length();
    int lz = z.length();
    int p;
    int k = 0;
    for ( int i = 0 ; i  <= len-11 ; i++ )
    {
    string tmps = st.substr(i,lx);

    if (tmps==x)
    {
        p = i;
        k++;
        break;
    }
    }
    if (k==0) return;

    for ( int i =  p+lx ;  i <= len - 11 + lx ;i++)
    {
    string tmps = st.substr(i,ly);

    if (tmps==y)
    {
        p = i ;
        k++;
        break;
    }
    }
    if (k==1) return ;
    for ( int i = p+ly;  i <=len - 11+lx+ly ; i ++)
    {
    string tmps = st.substr(i,lz);
    if (tmps==z)
    {
        k++;
        break;
    }
    }
    if (k==3)
    {
    flag = true;
    return;
    }

}
int main()
{
    int T;
    tar = "anniversary";
    cnt =0;
    for ( int i = 1 ; i <= 9 ; i++ )
    {
    for ( int j = i +1 ; j<= 10 ; j++ )
    {
        cnt++;
        s1[cnt] = tar.substr(0,i);
        s2[cnt] = tar.substr(i,j-i);
        s3[cnt] = tar.substr(j);
        
    }
    }
    cin>>T;
    while (T--)
    {
      flag = false;
      cin>>st;
      len = st.length();
      int k = 0;
      int num = 0;
      
      for ( int i = 1;  i <= cnt  ; i++ )
      {

          solve(s1[i],s2[i],s3[i]);
      } 
      if (flag)
        {
        cout<<"YES"<<endl;
        }
      else
        {
        cout<<"NO"<<endl;
        }

    }

    return 0;
}

 


 

(BC 一周年)hdu 5311 Hidden String

标签:

原文地址:http://www.cnblogs.com/111qqz/p/4684543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!