結果
問題 | No.190 Dry Wet Moist |
ユーザー |
![]() |
提出日時 | 2016-11-01 17:53:59 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 74 ms / 2,000 ms |
コード長 | 1,843 bytes |
コンパイル時間 | 1,887 ms |
コンパイル使用メモリ | 177,044 KB |
実行使用メモリ | 9,336 KB |
最終ジャッジ日時 | 2024-11-25 01:00:59 |
合計ジャッジ時間 | 3,509 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 28 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define rep(i, j) for(int i=0; i < (int)(j); i++)#define all(v) v.begin(),v.end()template<class T> istream& operator >> (istream &is , vector<T> &v) { for(T &a : v) is >> a; return is; }class Solver {public:bool solve() {int N; cin >> N;vector<int> A(2 * N); cin >> A;vector<int> p, m;int zero = 0;for(int a : A) {zero += a == 0;if(a > 0) p.push_back(a);if(a < 0) m.push_back(a);}sort(all(p), greater<int>());sort(all(m));auto f = [](const vector<int> &p, const vector<int> &m, int zero, int sign) {int ret = 0;if(p.size() > 0) {int pi = 0;for(int mv : m) {if((sign == 0 and mv + p[pi] == 0) or(mv + p[pi]) * sign > 0) {ret++;pi++;}if(pi >= p.size()) break;}if(sign != 0) {int a = min<int>(p.size() - pi, zero);ret += a;pi += a;ret += (p.size() - pi) / 2;}}if(sign == 0) ret += zero / 2;return ret;};int z = 0;map<int, int> a;for(int i : p) a[i]++;for(int i : m) if(a[abs(i)] > 0) {z++;a[abs(i)]--;}z += zero / 2;cout << f(m, p, zero, -1) << " " << f(p, m, zero, 1) << " " << z << endl;;return 0;}};int main() {cin.tie(0);ios::sync_with_stdio(false);Solver s;s.solve();return 0;}