以下网站有问题。
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;
}

最佳答案

你没有检查正确的财产。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");

关于algorithm - Codechef PERMUT2解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11818325/

10-10 05:03