Codechef May Long Challenge,Chef和Strange Matrix的以下代码有什么问题?

时间:2014-05-12 12:32:32

标签: c

#include <stdio.h>
int main()
{
    long long int n, m, p, i, j, total_cost, cost;
    scanf( "%lld %lld %lld", &n, &m, &p );
    long long int ar[n][m];
    for( i = 1; i <= n; ++i ){
        for( j = 1; j <= m; ++j ){
            ar[i][j] = j;
        }
    }
    while( p-- ){
        scanf( "%lld %lld", &i, &j );
        ar[i][j] += 1;
    }
    /*
    printf("\n");
    for( i = 1; i <= n; ++i ){
        for( j = 1; j <= m; ++j ){
            printf("%d ", ar[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    */
    if( n == 1 && m == 1 ){
        printf( "0\n" );
        return 0;
    }
    if( m == 1 ){
        for( i = 1; i <= n; ++i ){
                printf( "0\n" );
        }
        return 0;
    }

    for( i = 1; i <= n; ++i ){
        total_cost = 0, cost = 0;
        for( j = m; j >= 2; --j ){
            cost = ar[i][j] - ar[i][j - 1];
            if( cost < 0 ){
                    printf( "-1\n" );
                    break;
            }
            total_cost += cost;
        }
        if( cost >= 0 ){
               printf( "%lld\n", total_cost );
        }
    }
    return 0;
}

这给了我WA。以下是问题说明CHEFBM

我检查过的测试用例:

  1. 1 5 3 1 2 1 4 1 5 输出: 5
  2. 4 4 6 2 2 3 2 3 2 4 3 4 4 4 3 输出: 3 3 -1 4
  3. 1 4 5 1 3 1 2 1 2 1 1 1 1 输出: 1
  4. 4 4 6 3 2 2 3 3 2 2 4 1 2 3 2
    输出: 3 4 3 3
  5. 4 1 1 1 1 输出: 0 0 0 0
  6. 1 4 3 1 1 1 1 1 4 输出: -1
  7. 1 1 1 1 1 输出: 0
  8. 1 1 2 1 1 1 1 输出: 0
  9. 2 2 3 1 1 1 1 1 1 输出: -1 1
  10. 还有更多。对于哪个测试用例,这给出了错误的答案?

    如果我能知道下注的原因,那将非常有帮助。

1 个答案:

答案 0 :(得分:2)

如约束中所给出的,n和m都可以是10 ^ 5。分配2-d阵列a [10 ^ 5] [10 ^ 5]在这里是不可行的。您的内存不足,因此可能会遇到运行时错误或错误的答案。您的算法为O(n ^ 2),因此它不会在给定的时间限制内传递。尝试优化您的代码。如需进一步助理,您可以查看我的code