Codechef PERMUT2解决方案

时间:2012-08-05 17:00:05

标签: algorithm

以下网站有问题。

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;
}

1 个答案:

答案 0 :(得分: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");