結果
問題 | No.1998 Manhattan Restaurant |
ユーザー |
|
提出日時 | 2022-03-22 18:26:32 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 8 ms / 2,000 ms |
コード長 | 3,108 bytes |
コンパイル時間 | 1,434 ms |
コンパイル使用メモリ | 96,860 KB |
実行使用メモリ | 6,144 KB |
最終ジャッジ日時 | 2024-09-21 02:04:53 |
合計ジャッジ時間 | 2,643 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 31 |
ソースコード
#pragma GCC optimize("Ofast")#pragma GCC target("avx2,bmi2,popcnt,lzcnt")#include <cassert>#include <cstdio>#include <cinttypes>#include <unistd.h>#include <sys/stat.h>#include <sys/mman.h>class strictInput{char *p;off_t cur = 0;off_t len = 0;public:explicit strictInput(int fd = 0){struct stat st;fstat(fd, &st);p = (char *)mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);len = st.st_size;}char readChar(){assert(cur != len);return p[cur++];}void unreadChar(){assert(cur != 0);--cur;}bool isEOF() { return cur == len; }void readEOF() { assert(isEOF()); }void readSpace() { assert(readChar() == ' '); }void readEoln() { assert(readChar() == '\n'); }// reads uint64_t in range [from, to]uint64_t readU64(uint64_t from = 0, uint64_t to = UINT64_MAX){uint64_t cur = 0;off_t read_cnt = 0;bool leading_zero = false;while (!isEOF()){char p = readChar();if (!('0' <= p && p <= '9')){unreadChar();break;}uint64_t v = p - '0';assert(cur <= UINT64_MAX / 10);cur *= 10;assert(cur <= UINT64_MAX - v);cur += v;if (read_cnt == 0 && v == 0)leading_zero = true;++read_cnt;}if (cur == 0)assert(read_cnt == 1);elseassert(!leading_zero);assert(from <= cur && cur <= to);return cur;}// reads int64_t in range [from, to]int64_t readI64(int64_t from = INT64_MIN, int64_t to = INT64_MAX){uint64_t cur = 0;off_t read_cnt = 0;bool leading_zero = false;bool leading_minus = readChar() == '-';if (!leading_minus)unreadChar();while (!isEOF()){char p = readChar();if (!('0' <= p && p <= '9')){unreadChar();break;}uint64_t v = p - '0';assert(cur <= UINT64_MAX / 10);cur *= 10;assert(cur <= UINT64_MAX - v);cur += v;if (read_cnt == 0 && v == 0)leading_zero = true;++read_cnt;}if (cur == 0)assert(read_cnt == 1 && !leading_minus);elseassert(!leading_zero);if (cur <= INT64_MAX){int64_t ret = cur;if (leading_minus)ret = -ret;assert(from <= ret && ret <= to);return ret;}else{assert(leading_minus && cur == uint64_t(INT64_MIN));assert(from == INT64_MIN);return INT64_MIN;}}};#include <climits>#include <iostream>#include <vector>using namespace std;int main(){strictInput Inp;int N = Inp.readI64(1, 100'000);Inp.readEoln();vector<pair<int, int>> V(N);int mina = INT_MAX, maxa = INT_MIN, minb = INT_MAX, maxb = INT_MIN;for (auto &[a, b] : V){int x, y;x = Inp.readI64(-1'000'000'000, 1'000'000'000);Inp.readSpace();y = Inp.readI64(-1'000'000'000, 1'000'000'000);Inp.readEoln();a = (x + y) / 2, b = (x - y) / 2;mina = min(mina, a), maxa = max(maxa, a);minb = min(minb, b), maxb = max(maxb, b);}Inp.readEOF();int ans1 = 0, ans2 = 0;for (auto [a, b] : V){ans1 = max(ans1, min(max(a - mina, b - minb), max(maxa - a, maxb - b)));ans2 = max(ans2, min(max(a - mina, maxb - b), max(maxa - a, b - minb)));}cout << min(ans1, ans2) << endl;}