密碼截獲
Time Limit:1000MS Memory Limit:1024K
Description:
Catcher是MCA國的情報(bào)員,他工作時(shí)發(fā)現(xiàn)敵國會用一些對稱的密碼進(jìn)行通信,比如像這些ABBA,ABA,A,123321,但是他們有時(shí)會在開始或結(jié)束時(shí)加入一些無關(guān)的字符以防止別國破解。比如進(jìn)行下列變化ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因?yàn)榻孬@的串太長了,而且存在多種可能的情況(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量實(shí)在是太大了,他只能向電腦高手求助,你能幫Catcher找出最長的有效密碼串嗎?
Input:
測試數(shù)據(jù)有若干行字符串,包括字母,數(shù)字,符號。(字母區(qū)分大小寫)
Output:
與輸入相對應(yīng)每一行輸出一個整數(shù),代表最長有效密碼串的長度。
Sample Input:
ABBA
12ABBA
A
ABAKK
51233214
abaaab
Sample Output:
4
4
1
3
6
5

/**//*
** °ÝÃD´yz:http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1001
** Author: flysky
** date: 2008-01-19 ª¯§¾¤u§@°V½m¤é
*/
#include <iostream>
#include <string>

using namespace std;


int solve(string &input)


{
int len=input.size();
int passlen=1;
for(int i=0;i<len;i++)

{
int k=i;
int p2=0;
bool same=false;
for(int j=len-1;j>i;j--)

{
if(input[k]==input[j])

{
if(!same)
p2=j;
k++;
same=true;
}
else

{
same=false;
k=i;
}
}
if(passlen<p2-i+1) passlen=p2-i+1;
}
return passlen;
}
int main(int argc, char *argv[])


{
string input;
while(1)

{
cin>>input;
cout<<solve(input)<<endl;
}

return 0;
}

自己測試沒問題,提交卻不通過,感覺題目沒有說清楚如何退出。
----------------------------------------------------------------------------------------------
nana di~終於讓我過了
正確代碼:
#include <iostream>
#include <string>

using namespace std;


int solve(char *input,int len)


{
int passlen=1;
for(int i=0;i<len;i++)

{
int k=i;
int p2=0;
bool same=false;
for(int j=len-1;j>i;j--)

{
if(input[k]==input[j])

{
same=true;
p2=j;
for(int j1=j-1,i1=k+1;j1>i1;j1--,i1++)
if(input[i1]!=input[j1])

{
same=false;
break;
}
}
else

{
same=false;
k=i;
}
if(same)

{
if(passlen<p2-i+1) passlen=p2-i+1;
//i=p2+1;
break;
}
}
}
return passlen;
}
int main(int argc, char *argv[])


{
char input[100];
while(scanf("%s",input)!=EOF)

{
cout<<solve(input,strlen(input))<<endl;
}

return 0;
}