#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。
我检查过的测试用例:
还有更多。对于哪个测试用例,这给出了错误的答案?
如果我能知道下注的原因,那将非常有帮助。
答案 0 :(得分:2)
如约束中所给出的,n和m都可以是10 ^ 5。分配2-d阵列a [10 ^ 5] [10 ^ 5]在这里是不可行的。您的内存不足,因此可能会遇到运行时错误或错误的答案。您的算法为O(n ^ 2),因此它不会在给定的时间限制内传递。尝试优化您的代码。如需进一步助理,您可以查看我的code。