(BC 一周年)hdu 5311 Hidden String
http://acm.hdu.edu.cn/showproblem.php?pid=5311 题意:问能否从一个给定的字符串中拿出三个不相交的字串(原串可以有剩余),组成字符串“anniversary” 思路:暴力。
比赛的时候没做出来,sad 我发现我有一个问题,就是不敢跑暴力 有不少题其实正解就是暴力 或者有的题,暴力不是标解,但是绝对可A,可我就不敢写... 就觉得不会是这样.. 说到底还是不自信吧...
思路是枚举两个间隔点,将 string tar="anniversary"分成三个不为空的部分 然后在给的字符串中按顺序查找这三部分 如果都能找到,直接YES 如果任何一种间隔的分段都无法YES 就NO...
妈蛋,if语句后面多写了个分号,调了半个多小时才发现(为啥总是这种傻逼错误....) 还有一点,因为是多组数据,而对于每组数据,将tar拆分的方法都是一样的,可以先预处理一下存到数组里.
1
2 #define yn hez111qqz
3 #define j1 cute111qqz
4 #define tm crazy111qqz
5 #define lr dying111qqz
6 using namespace std;
7 #define REP(i, n) for (int i=0;i<int(n);++i)
8 typedef long long LL;
9 typedef unsigned long long ULL;
10 const int N=1E2+5;
11 int d[N];
12 int len;
13 string st,tar,s1,s2,s3;
14 bool flag;
15
16 void solve (string x,string y,string z)
17 {
18 int lx = x.length();
19 int ly = y.length();
20 int lz = z.length();
21 bool debug = false;
22 if (x=="anniv"&&y=="er"&&z=="sary")
23 debug = true;
24 int p;
25 int k = 0;
26 for ( int i = 0 ; i < len-lx+1 ; i++ )
27 {
28 string tmps = st.substr(i,lx);
29 // if (debug) cout<<"tmaaaps:"<<tmps<<endl;
30 if (tmps==x);
31 {
32 p = i;
33 // cout<<"tmps1:"<<tmps<<endl;
34 k++;
35 break;
36 }
37 }
38 if (k==0) return;
39
40 for ( int i = p+lx ; i < len - ly +1 ;i++)
41 {
42 string tmps = st.substr(i,ly);
43 // if (debug) cout<<"tms2:"<<tmps<<endl;
44 if (tmps==y)
45 {
46 p = i ;
47 // cout<<"tmps2:"<<tmps<<endl;
48 k++;
49 break;
50 }
51 }
52 if (k==1) return ;
53 for ( int i = p+ly; i < len - lz +1 ; i ++)
54 {
55 string tmps = st.substr(i,lz);
56 if (tmps==z)
57 {
58 // cout<<"tmps3:"<<tmps<<endl;
59 k++;
60 break;
61 }
62 }
63 if (k==3)
64 {
65 flag = true;
66 return;
67 }
68
69 }
70 int main()
71 {
72 int T;
73 cin>>T;
74 while (T--)
75 {
76 flag = false;
77 cin>>st;
78 len = st.length();
79 int k = 0;
80 int num = 0;
81 tar="anniversary";
82 for ( int i = 1 ; i <=9 ; i++ )
83 {
84 for ( int j = i+1 ; j <= 10 ; j++ )
85 {
86 s1 = tar.substr(0,i);
87 s2 = tar.substr(i,j-i);
88 s3 = tar.substr(j);
89 // cout<<i<<" "<<j<<" "<<s1<<" "<<s2<<" "<<s3<<endl;
90 solve (s1,s2,s3);
91 if (flag)
92 {
93 break;
94 }
95 }
96 if (flag)
97 break;
98 }
99 if (flag)
100 {
101 cout<<"YES"<<endl;
102 }
103 else
104 {
105 cout<<"NO"<<endl;
106 }
107
108 }
109
110 return 0;
111 }
112