#include #define ALL(x) (x).begin(), (x).end() #define LB(v, x) (int)(lower_bound(ALL(v), x) - (v).begin()) #define UQ(v) sort(ALL(v)), (v).erase(unique(ALL(v)), (v).end()) #define IO ios::sync_with_stdio(false), cin.tie(nullptr); #define chmax(a, b) (a) = (a) < (b) ? (b) : (a) #define chmin(a, b) (a) = (a) < (b) ? (a) : (b) using namespace std; using ll = long long; const int INF = 1e9 + 10; const ll INFL = 4e18; /* .-WVyyyVyVyWkfWHWHVyVyyyyyyyVyyyVyyyyVWMmkyyyyyyyyyVH&. ..WVyVyyVyyWWHHVyyyVyVHHkyVyyyyyyyyyyyyyyyyyWMkVyyyyyyyyVVn, .XVVVyyyyVyVKWyyyyyyyyyyyyWMkyVyVyyyyyyyyyyyyyyVyWHWVyVyyyyyVVS, .HyyyyyyyyyVWHyyVyVyVyVyyyVyyVWNkyyVyVyyyyyyyyyyyyyyyWNkyyyyyyyyyVh, :_. `.HyyyyVVyyVyVWWyVyyyyyyyyyyyyyyyyyWHWyyyyyyyyyyyyyyyyyyVyWHWyyyyyyyyyVn. :::_. ` JWyyyVWyyyyyVWyyWyyyyyyyyyyyyyyyyyyyyWWyyyyyyyyyyyyyyyyyyyyyWkyyyyyyyyyyW,` ~::::- .WyyyyyWWyyyyyWyyWyyyyyyyyyyyyyyyyyyyyyyWWyyyyyyyyyyyyyyyyyyyyyyWyyyyyyyyyyVn :~~:~:~. ` ` `.HyyyyyWWyyyyyWyyWWyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyVWyyyyyyyyyyyyyyyyyyyyyyyyyyk. :~:~::::_ .WyyyyyWWyyyyyyWyyWyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyWkyyyyyyyyyyyyZyWyyyyyyyyyyyW, ~::~:~~::~ ,WyyyyyWHyyyyyyyyyWyyyyyyyyyyyyyyyyyyyyyyWkyyyyyyyyyZyWkyyyZyZyyyyyyyyHyyyyyyyyyyyW,` ::~:::~:~` ,yyyyyyWHyyyyZyyyyWkyyyyyyyZyyZyyZyyZyyZyyyWkyyyZyyyyyyyWkyyyyyZyyyyyyyWHyyyyZyyyyyyW; ` ` ` ` ` ~:~~:::~ ` .WyyyyyWHyyyZyyZyyyWyyyyyyyyyyyyyyyyyyyyyyyyyWWyyyyyyyyyyyHWyyyyyWyZyyyyyWkyyyyZyZyyyyy; ` :~::~~` .HyWHyyyWyyyyyyyyyyyWyyyyZyyZyyZyyZyyZyyZyyyyyyVyyyyyWWyyyyyHyZyyyyHyyyyyyyWkyZyyZyZyy=?W, ` ``` ............ :~::~` ` .kyyWyyyWHyyyyyyyyyyyWyyyyyyyyyyyyyyyyyyyyZyZyyyyyZyZyyyyyZyyyWyZyZyWyyZZyyyyHyyZyyyyy%..(X-::::~::~::::::::::~:~:: ::~~ ` (yyWyyyyWyyyyyyyyWyyWyyyZZyZyZyZyZyZyZyZyyyZyZyZyyyyyyyyWyyZyyWkyyyyWkyyyZyZyWHyyyk..(W-..Oh::~~:~::~:~~~~~:~::~:~: ~:~ ` .WyWyyZyWHyyZZyZyWyyyWyyyyyyyZyyyZyyyZyyZyZyyyyZyyZyyZyyyyHyyyZyWyZyyWNyyZyyyY7Wkyyyk-(yyyyyW2:~::~~:~::~::~~:~:~:~~ ~``_:::::::~::dyyWyyyyWyyyyyyyyWyyyWyyyWyyyyyZyyyZyyyyyZyyZyyyyZyyWyZyZyWHyyyyyHyyyyNZyyyyyl.(NyyyyyyyyyyyyW_~:~::~:~::~:::~:~:::: `~:~:~:~~:(HyyyyZyWHyZyyZyyWHyZyWyZyVZyZyyyZyyyZyZyyyyZyZyZyyyyWkyyyZyWyZyyyWkyZyWyyZyZyyyyWkyyyyyZyZyZyWr:~:~::~:~:~:~::~:~~:~ ` ` :~::~::~JWyWyyyyWyyyZyyZyWWyyyWyyyyyZyZyyyZyyyZyZyZyyyyZyyyZyyHyyyyyyZyZyyyWyyZWkyyZyyZyyyNyZyyZyyyZyyWk:::~:~::~::~:~::~::~: ` ` ~::~::(WyW$-?4yHZyyyyyyyWyyZyWyyyyZyyyZyyZyZyyyWyyZyyZyC74yZyWkyyZyyyyyZyyykyyWHyyyyZyyZyWkyyWyyZyyyyWW2:~::~:~:~::~:~::~::~ ` ` ` `~(#yW{..dW#y>.dfjyyWyyyZWWyZWyyyyZyyyZyyyyyyyyyZyyWdyyyyyHyyyZyZyyZyyyWyyyHyyZyyyZyyWNyyWyyyZyZyyWb::~::~:~:~::~:~:~:~: ` ` `` ` `.WWyn((dWHy&-yk+WyHyZyyyWyyWWyyZyyZyyyZyyyyyyZyyyyyZyyZyWyZykyyZyyZyZyHyypyyZyyZyyyyWWyWyyyyZyyyWR:~:~:~::~:~:~::~:~:~ ` ` `` `dyKyyyyyWyyyyyyWWyHyyZyyWyyyHyyyyZyyZyyZyyWyyyyZyyZyyZyyWkyyWWyyyyyyyyWyyWyyyZyyyZyZWHyWkyZyyyZyyH<:~:~:~:~::~:~:~::~: ` ` ` ` ` HWWyyyyyWyyZyyyWyyHyyyZyWyyyWyyZyyyZyyZyyZWkyyZyyZyyyyyyWHyyWNyyyWyyyyyHyWyyZyyZyyyyyNyyWyyZyyyZyW>::~:~:~:~:~::~:~:~: ` ` ` ` ``.HWyZyZyyyyyZyZyXyyHyyZyyWkyyWkyyZyyyyZyyyyyHyyyyZyyZyZyyyHyyybHyyWWyZyyWyWyyyyZyyZyyyHyykyyyZyyWyW[~::~::~::~:~:~::~:~ ` `` ` ` ,yHyyyyyZyyZyyyyWyyHyyyyyyHyyyHyyyZyyZyyZyyyWWyZyyyZyyyZyyHyyyWWWyykyyZyWkWyyyZyyZyZyyWyyHyyZyyyWHyD:~:~:~:~:~:~::~~::~ ` ` ` ` `JWHyyykyyZyyyZyyWyyHyWyZyyWyyyWkyyyZyyyZyZyyWHyyZyyyZyyyyyHyZyWWHyyHyyyyyHWWyyyyyyyyZyWkyHyyyZyyyWWS::~:~:~:~:~:~:~:~:: ` ` ` ` XWyZyykyyyZyyyZyWyyNyWyyZyWHyyyHyZyyZyyyyyZyykyyyZyyyZyZyyHyyZH4yyyWkyZyyyyZyyyZWkyZyyyZyyyyWHyZWD~.?WWEdkyyyNHWyyyyZyyyyyNyWHyyZyyyyHHb:::~:~:~:~:~:~:~:: `` ` ` .XWyZyWHyyyyyyZyyXWykyyWyyZWr(HyyyHkyyZyyZyZyyWHyyyyyyZyZyWHyyW:.-YHyW;?kyyWHWyZyyZyZyZyWyWNyyyyZyy$WW:~::~:~::~::~:~:~~ ` `` _::dWdyyyyHyZyyZyyyyWWyWyyWKyyW].-kyyyNWyyZyyyyZyyHyZyZyyyZyyWyWWNY=..zyW<;dkyWHWyyyZyyyZyyWWyHyyZyyZybJW<:~~::~:~:~:~::~:: ` ` .:~(kfJyyZyHyyyyyZyZyykyWWyyNyyyb../kyyyHWyyZyyyyyyWyyZyZyWWkkHHWW\.`.`.WW<;;dkW#WWyyyyZyyyyWWyHkyyZyyyP(W2:~:~::~:~:~:~:~:~ `` ` ~::(H$JyyyyHyyWWyyyyyWWyWkkW#HkkW-..?kyyWNWyyyZZyZyWWyyyyyyWyWNyyf. ..(?WH++++HWNHkWyyyyZyyyWWkHHyyyZyyP:Xr::~:~~::~::~:~:~: ` `.:::(WlJWyZyHyyyWZyyZyWWyWHyW6vWyyr_?7THWWMHKyyyyyyyyHyZyZyyyyWWyWI<~-(igmWqHHNMMHHWHyyZyyZyyWHHWWyZyyyyP:dR:~::~:~::~:~::~:: ` ` ~:~:JW<(kyyyWyyyVyZyyyWVWyHyWv_jyyk_.../kyyb?kyyZyyZyHyyZyyZyW$wWf-+dqHNMMMMM=jN(NNHyyyyZyyZyWXNWWyyyZyyP:JW:~:~::~~:~::~:~:~ ` ` ~:~JS:(HyyyWyyZWyyyyyyHWyWyW:..jyVh..--(HkWs?WyyZyyyWyyyyyyyX!Jy~:Jb~:~:~:~::~::~::~ ` ` ` ` H)``,WyyWXHWyyHyyZyZyWNWR.?n (HvI?<<::~(H::~~:~:~::~::~:: ` ` ` k\ .(HyyWXHHyZHyyyZyyyWkD...<. `?4++::kk_:(C..-!...;+6v :~:~:~::~dyK~:~:?Wy#XHRJWyWdWyyyZyyWHkWXuuuXuuuUnJ,.`.`..`.`..`..`.``..`..`.J9======dWdXyWyyyZyyWWWSzuHuuHyyWW$~(HW>(! -!`..(j9jC: ::~:~:~::JyW:~:~(HyHuHW(HyWXNyyyZyyyHWWXSuuXXuuuuuXWUGJ...`.`.`.`...`.`...X3========dWdHyWyyZyyyHyWkuuWuzqyZyHR:(WW^.(^`..(jZ>;Z:: ~:~::~:~:(yW::::~qyWkWW2vyWKWWyyyZyyWRWWWuuuWuuuuuXpuuuuXdBk&(...`.`. .J6===========XWzNyVZyyyyW#yWkuuWuuWyyyWH_dY-/~....J3.` ::~::~:~::dyW:~(d1::::::::::;:dkyyyyyWWuXHkXkXVYUE<:::Z:::::?M#=======?==?==?======dyD:XyHyZyyKyyWIZXkXKX#^..``...(J3;;;;;;d-J>!.. ~::~::~:~:(ky$(D?;I;::::::::::;:;:;;:+t.$;~`` :~~:~::~::(HySd_<:?I::;::::::::JkyyZyyWR;;~.. :~::~:~:~::XyW'` <:j<::::;:::;::;::::.`.`..`...J6;:;;;:jdJ;;;<>3.. :~~::~:~(vYTC1OI-.`-?<::::;!````.XuZK?SX1zJWHmmHs_`.,=`` ~7TWWyyyyW?zT+Jj::::::;::::?HyZyZyW2jyb:;:`_<::??>?Us<;;x;:;::::dWyyyyWSdyR:<_```_:;HH.```.XZXf?7THHmH9Y"TWM= `X:<``````_T<_.``.`.`.`....I>?>?>>>>1T9e+>???G+j+::::::??>??>?>??>>?>>>+>>?1Gy:::;::;?yyZyWHHyW??>>??>vGxrrrX+::::::4yyyyHyyWII````````(XGKuXW#7=!` (kkkkkkH .;:.`.`.``.`.`.`...P;;:;;:;:;;<_(^````` uuX0uXQXVVT9WAdVV&x?>>?>?4yrrvW;:::;(WyZyWyyWrS````````.HuuX#H: ,kkkkkkH_ <::_ W>.`..`..`..`.`..`J<;:;;:;;:;;-J!`````` XX9C11>??>>?>?4uXWHAwOx?1zdHyrrG<;:::vyyyWHyyDw``....,..dkXK<+< ,qkkkkkH_ >;+v7'.`.`..`..`.`..`.-C;:;:;;:;;:jC```````` >?>>+1ug&g&+>??vXuuuuXUAXyrrdHwwb::::?>??>?13?[ ,qkkkkkH} ?!..``.`.``.``.`..`...<;:;;;:;;;j/~````````` UQgMHHHH@HHHMHe+?WuuuuuuuuOZQwWHdc:;:?>?>?>>>?>>>>>>?>>S ,qkkkkkH[ ...`..`...`..`..`.`.v<:;;:;;;<+7```````````` HMMMHBYMMMMkkkkHUAWkuuuuuXkYY1??+OTmVSryT1>>>?>>?>?>>?>?>?>>??d ` .qkkkkqk] .;.`.`.``..`..`.`.J3;:;:;<<(v=:````````````` 1>>?>>?>v&7TMHHStrZHmuXk9z?>>>?>uUwwwV3>>?>?>>?>>?>?>>?>?>?>>>J- .HkkkkkkE L..`..`.``.`. .JC;;;zzzzzz+>?vzrrWHmAgkMB3?>>>>??uUrwZC?>?>?>?>?>?>?>>?>?>>>?>?>?d] HkkkkkqH. j_.`.`...`.`.?<<<~_ .JW<::~.!````````./` `` >??1z7TWAAyOWgYYCjd5?>>?>?>?+dXwV1?>>?>>>?>>?>>?>>?>>?>?>>?>?>dD XqkkkkkH[ ,c_..`.`..`.`.....JD::X::: /```````./_.,zOT ?>>>?>??udY6??+ud3?>>?>>?>?>7C???>>?>>?>>?>?>?>>?>>?>>?>?>>?>?JH. ` ,qkkkkkkb P:<-...---.-!!````z+;K::<._`````.-Y1?>?>?> zzzuz&v6?1+zrQY1?>>?>>?>>?>>?>>>>>?>?>?>?>>>?>?>?>?>?>>?>?>>>?j#] .HkkkkkqH. ` u;j+gV"=_:>< `````.b;@;:<_```..1?>>>>>>?>> >??xC>>jrrrQ91??>>>?>?>?>>?>>?>?>>?>>?>>>?>?>>>?>>?>>?>>?>?>?>jKS ` Hkkkkkkq{````` ,$<::;_``{+;_``````J+b::<``.J?>?>>>>>? 1z1>?jrrrAY1?>>>??>>?>>?>?>>?>?>?>>?>>?>?>?>?>?>>?>?>?>?>>?>>??Nd,` ```dkkkkkkkb````````S:::::.`~(:<``````.PX;:<.1?>>?>?>?>?????1 ?uy0rrrw91>?>?>>>?>>?>?>>?>>?>>?>>?>?>>>?>>>?>>?>>?>>>?>>?>?>?>drn``````(qkkqkkkH-```````(c;:::<. d::.``````S?2+1>?>?>?+&ggw0VC111 VwrrrwV1?>>>?>??>>?>>?>>?>?>>?>>?>>?>?>>?>>?>?>?>?>>?>>?>>?>>>?JkZ;`````,Hkkkkkkkh,```````.1+;:::;d::_``````(+C+&uQdY961>?>>?>>>>> wwwwZ<>>>?>?>1+&&&&x&+??>>?>>?>?>>?>>?>>?>?>>?>>?>>?>?>?>?>>?>>>OrG.`````4qkkkkkkkqn.``````` !+::2P:::.```` .kkVY1>?>>?>>>>?>>?>?> 11??>>>?>>?>?>1zOOrOOvz1?>>>?>>??++??>??>?>?>>?>>?>>?>>>?>>?>????zzL``````.4kqkkkkkkHa,````````?jw3:;;<````./6?>>?>>>>>?>>?>>>>?>> */ /// @file xor128.hpp /// @brief 疑似乱数生成 /// @brief xor shift による疑似乱数を生成する uint64_t Xor128() { static bool flag = false; static uint64_t x = 123456789, y = 362436069, z = 521288629, w = 88675123; if (!flag) { w = time(0); flag = true; } uint64_t t = x ^ (x << 11); x = y; y = z; z = w; return w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)); } /// @brief 0 以上 n 未満の整数から乱数を生成する uint64_t Xor128(uint64_t n) { return Xor128() % n; } /// @brief [l, r) の範囲の整数から乱数を生成する uint64_t Xor128(uint64_t l, uint64_t r) { return Xor128(r - l) + l; } // [l, r) /// @brief 0 以上 1 未満の浮動小数点数から乱数を生成する double Xor128Prob() { return (double)Xor128() / (1LL << 32); } /// @file bins.hpp /// @brief 二分探索 /// @param ok `judge` が true になる値 /// @param ng `judge` が false になる値 /// @param judge 判定関数 /// @return `judge(x)` が true になる境界値 template T BinarySearch(T ok, T ng, Judge judge) { while (abs(ok - ng) > 1) { T mid = (ok + ng) / 2; (judge(mid) ? ok : ng) = mid; } return ok; } /// @brief 回数指定二分探索 /// @param ok `judge` が true になる値 /// @param ng `judge` が false になる値 /// @param judge 判定関数 /// @param iter 探索回数 /// @return `judge(x)` が true になる境界値 template T BinarySearchIteration(T ok, T ng, Judge judge, int iter = 100) { while (iter--) { T mid = (ok + ng) / 2; (judge(mid) ? ok : ng) = mid; } return ok; } int main() { ll N; cin >> N; vector X(2 * N), Y(2 * N); for (int i = 0; i < 2 * N; i++) cin >> X[i] >> Y[i]; const int mx = 1e5; while (true) { ll A = Xor128(mx), B = Xor128(mx); auto count = [&](ll c) { ll ans = 0; for (int i = 0; i < 2 * N; i++) { ll val = A * X[i] + B * Y[i] + c; if (val > 0) ans++; } return ans; }; auto f = [&](ll c) { return count(c) >= N; }; ll res = BinarySearch(INFL, -INFL, f); bool ok = true; for (int i = 0; i < 2 * N; i++) { ll val = A * X[i] + B * Y[i] + res; if (val == 0) ok = false; } if (count(res) != N) ok = false; if (res < -mx || res > mx) ok = false; if (ok) { cout << A << " " << B << " " << res << endl; return 0; } } }