結果
問題 |
No.602 隠されていたゲーム2
|
ユーザー |
![]() |
提出日時 | 2017-12-02 01:49:21 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,290 bytes |
コンパイル時間 | 1,663 ms |
コンパイル使用メモリ | 170,120 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-28 02:08:36 |
合計ジャッジ時間 | 2,615 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 WA * 7 |
ソースコード
#include <bits/stdc++.h> using namespace std; const int MAX = 1e5 + 10; int n; long long d[MAX]; long long x, y; int main() { scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%lld", d + i); } scanf("%lld%lld", &x, &y); sort(d, d + n); if (x == 0 && y == 0) { cout << 0 << endl; return 0; } x = llabs(x); y = llabs(y); for (int i = 0; i < n; i++) { if (d[i] == x + y) { cout << 1 << endl; return 0; } } for (int i = 0; i < n; i++) { int low = i + 1, high = n - 1; while (high - low > 5) { int mid = (high + low) / 2; if (d[i] + d[mid] <= x + y) { low = mid; } else { high = mid; } } for (int j = low; j <= high; j++) { if (d[i] + d[j] == x + y) { cout << 2 << endl; return 0; } } } // 遠くに行って戻ってくる reverse(d, d + n); for (int i = 0; i < n; i++) { int low = i + 1, high = n - 1; while (high - low > 5) { int mid = (high + low) / 2; if (d[i] - d[mid] <= x + y) { low = mid; } else { high = mid; } } for (int j = low; j <= high; j++) { if (d[i] - d[j] == x + y) { cout << 2 << endl; return 0; } } } cout << -1 << endl; }