1

以下网站有问题。

http://www.codechef.com/problems/PERMUT2

我一直在尝试为PERMUT2编写解决方案。我的以下解决方案在某些测试用例上失败了。请帮助我发现以下代码中的缺陷。

#include <stdio.h>

int a[100000];

int main()
{
    int i, j, n, ret;
    while(1)
    {
        scanf("%d", &n);
        if(n == 0)
            break;
        ret = 0;
        for(i = 0; i < n; i++)
            scanf("%d", &a[i]);
        for(i = 0; i < n; i++)
            if(a[i] != i + 1)
                ret++;
        if(ret % 2 == 0)
            printf("ambiguous\n");
        else
            printf("not ambiguous\n");
    }
    return 0;
}
4

1 回答 1

1

您没有检查正确的属性。if(a[i] != i + 1) ret++;是不正确的检查。

您要检查a[a[i] - 1] == i + 1数组上的所有元素:

bool ambiguous = true;
for(i = 0; i < n; i++) {
    if (a[a[i] - 1] != i + 1) {
        ambiguous = false; 
        break;
    }
}
if(ambiguous)
    printf("ambiguous\n");
else
    printf("not ambiguous\n");
于 2012-08-05T17:25:24.693 回答