郁闷~~~~又错~~~哪点出问题了嘛~ 帮帮小弟吧~~ 题目描述:有一个小小的黑客,他叫小白。有一天,他为了破解一个软件,找出里面的漏洞,不停地去分析反汇编代码。终于,他发现了破解的方法:在各个字符串资源里分别找出距离最近的一对相同字符,这几对字符的距离组合起来再对用户名进行hash变换就是注册码了!于是小白又一次偷笑。输入:多组测试数据,一组一行,每行为一个长度不超过1e6的字符串以EOF标志结束输出:找出距离最近的一对相同字符,直接输出距离值。如果不存在相同字符,则输出-1样例输入:123123123456789abcde12a45样例输出:3-17其它:注意效率难度:Very Easy 我的代码: #include<iostream>#include<cstring>using namespace std; char a[1000000]; //为什么这个放到主函数里面就出问题呢? char b[1000000]; //会有Memory Limit Exceedint main(){ while(cin>>a) { int i,j,alen=0,tlen=0; long minlen=1000001; alen=strlen(a); for(i=0;i<alen;i++) b[i]=a[i]; for(i=0;i<alen;i++) { for(j=i+1;j<alen;j++) { if(a[i]==b[j]) { tlen=j-i; if(tlen<minlen) { if(tlen<0) tlen=-tlen; minlen=tlen; } break; } } } if( minlen==1000001 ||minlen==0) minlen=-1; cout<<minlen; } return 0;} 别人的代码: #define PB_ID ct10_2#include <iostream>#define MAXLENGTH 1000001 char string[MAXLENGTH]; int main(){ while (gets(string)) { unsigned int min=(unsigned)-1; int record[256]; for (int i=0;i<256;i++)record[i]=(unsigned)-1; for (int i=0;string[i]!='\0';i++) { int idx=(int)string[i]; if (record[idx]!=-1) { int ans=i-record[idx]; if ((unsigned)ans<min)min=ans; } record[idx]=i; } printf("%d\n",min); } return 0;} #define CP_VC6PP#include <iostream>#include <string.h>using namespace std; int search(char *s){ int min,len,i=0,j; char c1; len=strlen(s); min=len+1; for(i=0;i<=len-1;i++) { c1=s; j=1; while((c1!=s[i+j])&&(j<=len-1-i)&&(j<=min)) j++; if((j<min)&&(c1==s[i+j])) min=j; if(min==1) break; } if(min>len) min=-1; return min;} int main(){ char s[1000000]; while(gets(s)) { cout<<search(s)<<endl; } return 0;}

评论