Codeforces Round #726 (Div. 2)B. Bad Boy
给一个2d矩阵, 一个人的位置, 求矩阵上的两个点, 让这个人走的最远.
这题啥了, 最远的两个点, 当然是对角线. 哎….贴个比赛的code吧.
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <deque>
using namespace std;
int main() {
int T;
cin >> T;
while (T --)
{
int N,M,I,J;
cin >> N >> M >> I >> J;
auto dis = [&] (int x1, int y1, int x2, int y2) -> int64_t {
if(x1 == x2 && y1 == y2){
return -1;
}
return abs(x2 - x1) + abs(y2 - y1);
};
vector<pair<int64_t, pair<int, int>>> v;
int64_t a1 = dis(1, 1, I, J);
int64_t a2 = dis(N, M, I, J);
int64_t a3 = dis(1, M, I, J);
int64_t a4 = dis(N, 1, I, J);
v.push_back(make_pair(a1, make_pair(1, 1)));
v.push_back(make_pair(a2, make_pair(N, M)));
v.push_back(make_pair(a3, make_pair(1, M)));
v.push_back(make_pair(a4, make_pair(N, 1)));
sort(v.begin(), v.end());
cout << to_string(v[3].second.first) + " " + to_string(v[3].second.second);
int64_t b1 = dis(1, 1, v[3].second.first, v[3].second.second);
int64_t b2 = dis(N, M, v[3].second.first, v[3].second.second);
int64_t b3 = dis(1, M, v[3].second.first, v[3].second.second);
int64_t b4 = dis(N, 1, v[3].second.first, v[3].second.second);
vector<pair<int64_t, pair<int, int>>> vv;
vv.push_back(make_pair(b1, make_pair(1, 1)));
vv.push_back(make_pair(b2, make_pair(N, M)));
vv.push_back(make_pair(b3, make_pair(1, M)));
vv.push_back(make_pair(b4, make_pair(N, 1)));
sort(vv.begin(), vv.end());
cout << " "+ to_string(vv[3].second.first) + " " + to_string(vv[3].second.second) << endl;
}
return 0;
}