1

私はこの問題を試しています: http://www.spoj.com/problems/ANDROUND

私のアルゴは、32 行 N 列の 2D 配列で構成されています (31 ラウンド後、配列は変更されないため、32 です)。次に、前の行 (列は同じまま) の値とその隣の値の AND を取ることによって、2D 配列の各フィールドを計算します。ほぼすべての種類の入力をチェックして、目的の出力を得ました。しかし、まだWAを取得しています。これが私のコードです。誰かがエラーを指摘したり、私のプログラムが失敗したテストケースを提供したりできれば.

#include <cstdio>
#include <cstring>
using namespace std;

static long A[33][20002], N, T, K;

int main()
{
    scanf("%ld", &T);
    while(T--){
        memset(A, 0, sizeof A);
        scanf("%ld %ld", &N, &K); K=(K>31)? 31:K;                       \\Setting K=31 if K>31
        for(int i=1; i<=N; ++i) scanf("%ld", &A[0][i]);
        A[0][0]=A[0][N]; A[0][N+1]=A[0][1];                                \\first row is the input array

        for(int i=1; i<=K; ++i){
            for(int j=1; j<=N; ++j)
                A[i][j]= (A[i-1][j]&A[i-1][j-1]) & A[i-1][j+1];  \\taking AND of previous element in column and its neighbors.

            A[i][0]=A[i][N]; A[i][N+1]=A[i][1];           \\for making array cyclic.
        }
        for (int i=1; i<=N; ++i) printf("%ld ", A[K][i]);                     \\Printing the array after required rounds.
        printf("\n");
    }
    return 0;
}

ありがとうございました。

4

2 に答える 2

4

31ラウンド後、配列は変更されないため

それを信じさせる理由は何ですか?

Rラウンド後、インデックスの要素iは要素のみに影響されます

A[i-R] ... A[i+R]

i <= R(またはの場合は適切なラッピングを使用N < i+R)。

N/2したがって、ラウンド後に配列が変更されないことが保証されるだけです。

于 2013-05-02T00:16:52.947 に答える