当前位置: 代码迷 >> C语言 >> 求助
  详细解决方案

求助

热度:145   发布时间:2008-05-08 20:42:46.0
求助
题目描述:
有一个小小的黑客,他叫小白。有一天,他为了破解一个软件,
找出里面的漏洞,不停地去分析反汇编代码。
终于,他发现了破解的方法:在各个字符串资源里分别找出距离最近
的一对相同字符,这几对字符的距离组合起来再对用户名进行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;
}



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吧……
话说,和字符有关的题目,已经很习惯桶排了………………
----------------解决方案--------------------------------------------------------
  相关解决方案