#55162: 假解(?)


johnson10024@csie.io (張源峷)


每一個Row的最大值都取第一個、每一個Column的最小值都取第一個的情況下,雖然範例4會對不上,但因為測資內沒有範例測資,也沒有其他重覆極值在中間的測資,所以仍會AC。

參考假解Code (solve是正解):

#include <algorithm>
#include <iostream>
#include <cassert>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <string>
#include <utility>
#include <vector>
 
#define MOD (1000000007)
#define INF (0x3f3f3f3f)
#define PREC (0.0000001)
#define X first
#define Y second
 
// #define EASY
 
using namespace std;
 
typedef long long int ll;
typedef pair<int, int> pii;
 
int mp[200][200];
int ans[200][200];
 
void init()
{
 
}
 
 
void solve()
{
    #ifdef EASY
    
    #endif
int n;
    scanf("%d", &n);
    
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            scanf("%d", &mp[i][j]);
        }
    }
    
    int mx, mn, mxi, mni;
    
    for(int i = 0; i < n; i++)
    {
        mx = -1;
        for(int j = 0; j < n; j++)
        {
            if(mp[i][j] > mx)
            {
                mx = mp[i][j];
                mxi = j;
            }
        }
        
        for(int j = 0; j < n; j++)
        {
            if(mp[i][j] == mx)
            {
                ans[i][j] = 1;
            }
        }
    }
    
    int ok = false;
    for(int i = 0; i < n; i++)
    {
        mn = INF;
        for(int j = 0; j < n; j++)
        {
            if(mp[j][i] < mn)
            {
                mn = mp[j][i];
                mni = j;
            }
        }
        
        for(int j = 0; j < n; j++)
        {
            if(mp[j][i] == mn && ans[j][i] == 1)
            {
                printf("%d %d\n", mni, i);
                ok = true;
                break;
            }
        }
    }
    
    if(!ok)
    {
        printf("NO\n");
    }
}
 
void hack()
{
    int n;
    scanf("%d", &n);
    
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            scanf("%d", &mp[i][j]);
        }
    }
    
    int mx = -1;
    int mxi;
    for(int i = 0; i < n; i++)
    {
        mx = 0;
        for(int j = 0; j < n; j++)
        {
            if(mp[i][j] > mx)
            {
                mx = mp[i][j];
                mxi = j;
            }
        }
        
        ans[i][mxi] = 1;
    }
    
    for(int i = 0; i < n; i++)
    {
        mx = INF;
        for(int j = 0; j < n; j++)
        {
            if(mp[j][i] < mx)
            {
                mx = mp[j][i];
                mxi = j;
            }
        }
        
        if(ans[mxi][i])
        {
            printf("%d %d\n", mxi, i);
            return;
        }
    }
    
    printf("NO\n");
}
 
int main()
{
// int n;
// scanf("%d", &n);
 
// while(n--)
{
init();
hack();
 
}
return 0;
}