Board这题我一开始用的思路是找出待求元素所在行和列的最小值再相加,这种思路只能通过了14%的数据。后来越想越复杂,然后就写不出了😂,直到今天我再来看此题时猛然发现这是一个思维题。我看了题解区发现题解区的思路是对的,但是代码存在问题,他们的代码过不了当-1的位置是(0,n-1)的这种情况,至于为什么能ac,可能是因为测试数据有点水。
我的思路全在图里
图片说明

按照这种思路便可推出其他的情况
接下来是菜鸡的ac代码,有问题还请直接指出。

#include<stdio.h>

int n,a[1005][1005] = {0},x,y;

int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&a[i][j]);
            if(a[i][j] == -1) {
                x = i;
                y = j;
            }
        }
    }
    if(x == n-1) {
        if(y == 0) printf("%d",a[x-1][y] + a[x][y+1] - a[x-1][y+1]);
        else printf("%d",a[x-1][y] + a[x][y-1] - a[x-1][y-1]);
    }
    else if(y == n-1){
        if(x == 0) printf("%d",a[x+1][y] + a[x][y-1] - a[x+1][y-1]);
        else printf("%d",a[x-1][y] + a[x][y-1] - a[x-1][y-1]);
    }
    else printf("%d",a[x+1][y] + a[x][y+1] - a[x+1][y+1]);
    return 0;
/*
3
1 0 -1
2 1 2
3 2 3
题解区的代码过不了这组代码(手动滑稽)
*/
}