hdu 2203:親和串(水題、串の練習)
7090 ワード
親和串
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7298 Accepted Submission(s): 3324
Problem Description
人は年を取るにつれて賢くなるか、それとも大きくなるにつれて愚かになるか、これは世界の科学者が考える価値のある問題であり、同じ問題Eddyもずっと考えていた.彼は小さい頃から親和串がどのように判断したか知っていたからだ.しかし、今大きくなっても親和串をどのように判断するか分からないことに気づいた.そこで彼はもう一度聡明で人を助けるのが好きなあなたにこの問題を解決するように教えてもらうしかなかった.
親和列の定義は、2つの文字列s 1およびs 2が与えられ、s 1サイクルシフトによってs 2をs 1に含めることができれば、s 2はs 1の親和列であるということである.
Input
この問題には複数のテストデータがあり、各データの第1行には入力文字列s 1が含まれ、第2行には入力文字列s 2が含まれ、s 1とs 2の長さはいずれも100000未満である.
Output
s 2がs 1の親和列である場合、「yes」が出力され、逆に「no」が出力される.各テストの出力は1行を占めます.
Sample Input
AABCD
CDAA
ASD
ASDF
Sample Output
yes
no
Author
Eddy
Recommend
lcy | We have carefully selected several similar problems for you:
1686
1711
2201
3746
3068
串の練習.
最初はKMPアルゴリズムでマッチングしようとしたが,ライブラリ関数を直接使えばこの問題を簡単に解決できることが分かった.
strcpy()、strcat()、strstrstr()の3つの関数をそれぞれ使いました.この問題は文字列処理関数を練習するのにいいです.
もちろんKMPアルゴリズムのやり方も実現しますが、今は時間がないので、後で話しましょう.
バージョン1(strstr()関数のみ):
バージョン2(進化バージョン、3つの関数で使用):
Freecode : www.cnblogs.com/yym2013
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7298 Accepted Submission(s): 3324
Problem Description
人は年を取るにつれて賢くなるか、それとも大きくなるにつれて愚かになるか、これは世界の科学者が考える価値のある問題であり、同じ問題Eddyもずっと考えていた.彼は小さい頃から親和串がどのように判断したか知っていたからだ.しかし、今大きくなっても親和串をどのように判断するか分からないことに気づいた.そこで彼はもう一度聡明で人を助けるのが好きなあなたにこの問題を解決するように教えてもらうしかなかった.
親和列の定義は、2つの文字列s 1およびs 2が与えられ、s 1サイクルシフトによってs 2をs 1に含めることができれば、s 2はs 1の親和列であるということである.
Input
この問題には複数のテストデータがあり、各データの第1行には入力文字列s 1が含まれ、第2行には入力文字列s 2が含まれ、s 1とs 2の長さはいずれも100000未満である.
Output
s 2がs 1の親和列である場合、「yes」が出力され、逆に「no」が出力される.各テストの出力は1行を占めます.
Sample Input
AABCD
CDAA
ASD
ASDF
Sample Output
yes
no
Author
Eddy
Recommend
lcy | We have carefully selected several similar problems for you:
1686
1711
2201
3746
3068
串の練習.
最初はKMPアルゴリズムでマッチングしようとしたが,ライブラリ関数を直接使えばこの問題を簡単に解決できることが分かった.
strcpy()、strcat()、strstrstr()の3つの関数をそれぞれ使いました.この問題は文字列処理関数を練習するのにいいです.
もちろんKMPアルゴリズムのやり方も実現しますが、今は時間がないので、後で話しましょう.
バージョン1(strstr()関数のみ):
1 #include <iostream>
2 #include <string.h>
3 using namespace std;
4
5 int main()
6 {
7 char s1[200000],s2[100000];
8 while(cin>>s>>s2){
9 int len1 = strlen(s1);
10 int i;
11 for(i=len1;i<2*len1;i++) // s1
12 s1[i] = s1[i-len1];
13 s1[i] = '\0';
14 if(strstr(s1,s2)) // s1 s2
15 cout<<"yes"<<endl;
16 else
17 cout<<"no"<<endl;
18 }
19 return 0;
20 }
バージョン2(進化バージョン、3つの関数で使用):
1 #include <iostream>
2 #include <string.h>
3 using namespace std;
4
5 int main()
6 {
7 char s1[200000],s2[100000],s[100000];
8 while(cin>>s>>s2){
9 strcpy(s1,s);
10 strcat(s1,s);
11 if(strstr(s1,s2)) // s1 s2
12 cout<<"yes"<<endl;
13 else
14 cout<<"no"<<endl;
15 }
16 return 0;
17 }
Freecode : www.cnblogs.com/yym2013