結果
問題 |
No.370 道路の掃除
|
ユーザー |
![]() |
提出日時 | 2016-08-15 08:55:54 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,089 bytes |
コンパイル時間 | 629 ms |
コンパイル使用メモリ | 68,440 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-07 16:58:55 |
合計ジャッジ時間 | 1,870 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 14 WA * 20 |
ソースコード
#include <iostream> #include <algorithm> #include <queue> #include <vector> using namespace std; int main() { int n, m; cin >> n >> m; // 正の近傍 priority_queue<int, vector<int>, greater<int>> pos_neighbor; // 負の近傍 priority_queue<int> neg_neighbor; for (int i = 0; i < m; i++) { int d; cin >> d; if (d >= 0) pos_neighbor.push(d); else neg_neighbor.push(d); } int pos_end = 0, neg_end = 0, num = 0; while (num < n) { if (neg_neighbor.empty()) { pos_end = pos_neighbor.top(); pos_neighbor.pop(); } else if (pos_neighbor.empty()) { neg_end = neg_neighbor.top(); neg_neighbor.pop(); } else if (abs(neg_neighbor.top() - neg_end) < abs(pos_neighbor.top() - pos_end)) { neg_end = neg_neighbor.top(); neg_neighbor.pop(); } else { pos_end = pos_neighbor.top(); pos_neighbor.pop(); } num++; } int ans = min(abs(neg_end), abs(pos_end)) + abs(neg_end) + abs(pos_end); cout << ans << endl; return 0; }