求助
题目描述:有一个小小的黑客,他叫小白。有一天,他为了破解一个软件,
找出里面的漏洞,不停地去分析反汇编代码。
终于,他发现了破解的方法:在各个字符串资源里分别找出距离最近
的一对相同字符,这几对字符的距离组合起来再对用户名进行hash变换
就是注册码了!于是小白又一次偷笑。
输入:
多组测试数据,一组一行,每行为一个长度不超过1e6的字符串
以EOF标志结束
输出:
找出距离最近的一对相同字符,直接输出距离值。
如果不存在相同字符,则输出-1
样例输入:
123123
123456789
abcde12a45
样例输出:
3
-1
7
其它:
注意效率
/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include <stdio.h>
int main()
{
char a[1000000];
while(scanf("%s",a)!=EOF)
{
char *s=a;
int k=-1;
while(*s)
{
char *p=s+1;
while(*p!='\0')
{
if(*s==*p&&k==-1) {k=p-s;break;}
else if(*s==*p&&k>p-s) {k=p-s;break;}
p++;
}
s++;
}
printf("%d\n",k);
}
return 0;
}
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include <stdio.h>
int main()
{
char a[1000000];
while(scanf("%s",a)!=EOF)
{
char *s=a;
int k=-1;
while(*s)
{
char *p=s+1;
while(*p!='\0')
{
if(*s==*p&&k==-1) {k=p-s;break;}
else if(*s==*p&&k>p-s) {k=p-s;break;}
p++;
}
s++;
}
printf("%d\n",k);
}
return 0;
}
Test 1: Wrong Answer
--------------------------------
Problem ID ct10_2
Test Result Wrong Answer
Total Time NULL
Total Memory 1028 Kb / 2000 Kb
Code Length 348 Bytes
不知道哪错了
[[it] 本帖最后由 zero1 于 2008-5-8 20:45 编辑 [/it]]
----------------解决方案--------------------------------------------------------
ACM题,!
----------------解决方案--------------------------------------------------------
注意是一行,你想想"%s"这种格式是什么结果
[color=white]
----------------解决方案--------------------------------------------------------
char a[1000000];
1M内存啊……你就算是不怕MLE,放到函数里面也会栈溢出吧………………
还有,O(n^2)的复杂度?等着TLE吧……
话说,和字符有关的题目,已经很习惯桶排了………………
----------------解决方案--------------------------------------------------------