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 に答える