CCFCSP认证第一题奇怪0分

2023年12月的CSP考试第一题,可以直接暴力满分,嵌套三个for循环。自己写的代码在本地可以成功跑出样例,但是在模拟考试里一直显示运行错误。百思不得其解(自己太菜了),求求各位大哥指点一下:

#include <bits/stdc++.h>
using namespace	std;
int main(){
	int m,n,i,j;
	int k,flag=0;
	cin>>m>>n;
	int home[10][1000]={0},result[10]={0};
	for(i=0;i<m;i++){
	for(j=0;j<n;j++){
		cin>>home[i][j];
	} 
	}
	for(k=0;k<m;k++){
		for(i=0;i<m;i++){
			flag=1;
			if(i==k)
			    continue;
			for(j=0;j<n;j++){
				if(home[i][j]<=home[k][j]){
					flag=0;
					break;
				}
	   		}
	    	if(flag==1){
	    		result[k]=i+1;
	    		break;
	    	}
	    }
    }
	for(k=0;k<m;k++){
	    cout<<result[k]<<endl;
    }
	return 0;
}

我看了看其他正解,你的数组大小没问题。

你照着题解看看吧。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    int a[n][m];
    int y = 0;
    for (y = 0; y < n; y++)
    {
        int x = 0;

        for (x = 0; x < m - 1; x++)
        {
            scanf("%d ", &a[y][x]);
        }
        scanf("%d", &a[y][x]);
    }
    int b[n];
    for (int w = 0; w < n; w++)
    {
        b[w]=0;
        for (int p = 0; p < n; p++)
        {
            bool flag = true;
            for (int i = 0; i < m; i++)
            {
                if (a[p][i] <= a[w][i]){
                    flag = false;
                    break;
                }
                    
            }
            if (flag){
                b[w] = p + 1;
                break;
            }    
        }
    }
    for (int j = 0; j < n; j++)
    {
        printf("%d\n", b[j]);
    }
    return 0;
}

首先,你的 markdown 语法代码块使用的不好导致代码可读性极差。

其次,「运行错误」指的是「运行时错误(Runtime Error)」吗?如果是的话,本地很可能不出错,因为你的机器对于内存访问没有那么严格的限制,CCF 的机器会在访问上有着严格限制。

按理来说,代码应该不会访问下表为 -1 的情况,那么就是数组越界的问题。如果是这样,那么应该有部分测试点通过。样例能过的原因也是因为数据量小。

依我看,home 数组有点小了,按照 OI 的惯例,至少为 [10][10000] 比较合理。

此外,CCF CSP J/S 2023 均没有你这一道题,我参考了,没见到。你是 CCF 题库中的。

1 个赞

@Qingwa 你来看看?

啊,我就帮他改了代码块…

这题我不会。

模拟考试只显示运行错误,也不知道是什么错。。。

我在网上看了一些正解。但还是觉得自己的这个方法没啥问题,但就是得不了分 :cold_sweat:

这样啊,如果你会造大数据的话,你可以用正解和你的程序对拍一下,看看输出有没有什么异同。

@Qingwa 另外,我这个发言是怎么回事啊?你都批准几次了都,怎么我这恢复还得你批准。Yet another bug?

新用户独占 feature 啊,防止一些专门发送垃圾信息的用户一上来先说两句话的。

另外你可以在 论坛使用指南 里翻一下等级,升个级就好了。