每一個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;
}
|