隐藏密码ACM 2003我的O(n)解决方案

时间:2015-05-29 11:54:56

标签: acm

我在stackoverflow中看到过这个问题。我为这个问题实现了O(n)解决方案,它在spoj(http://www.spoj.com/problems/MINMOVE)上被接受,但它在(https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=756)上给出了错误的答案。请看看我的代码。

#include<stdio.h>
#include<string.h>
#include<malloc.h>
int main()
 {
char *s=(char *)malloc(sizeof(char)*100011);
int test;
scanf("%d",&test);
while (test--){
int i=0,j=1,k=0,n;
scanf("%d",&n);
scanf("%s",s);

long long let=(n<<1);
while (i+k<let&&j+k<let)
{
    if (s[(i+k)%n]==s[(j+k)%n]) k++;
    else if (s[(i+k)%n]>s[(j+k)%n])
        {
            i=i+k+1;
            if (i<=j)   i=j+1;
            k=0;
        }
    else
        {
            j=j+k+1;
            if (j<=i) j=i+1;
            k=0;
        }

}
i=i<j?i:j;
printf("%d\n",i);
}

return 0;
}

0 个答案:

没有答案