結果
問題 | No.1374 Absolute Game |
ユーザー |
|
提出日時 | 2021-02-05 23:17:37 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,019 bytes |
コンパイル時間 | 2,192 ms |
コンパイル使用メモリ | 184,980 KB |
実行使用メモリ | 10,772 KB |
最終ジャッジ日時 | 2024-07-02 14:30:34 |
合計ジャッジ時間 | 4,300 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 14 WA * 12 |
ソースコード
#include<bits/stdc++.h>#define rep(i,N) for(int i=0;i<(N);i++)#define rrep(i, n) for (int i = (int)n-1; i >= 0; --i)#define FOR(i,a,b) for(int i=(a);i<(b);i++)using namespace std;const long long MOD = 1e9 + 7;const long long INF = 1e12;const int inf = 1e9;const int mod = 1e9+7;typedef long long ll;typedef pair<ll,int> P;typedef set<int> S;template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }__attribute__ ((constructor))void fastio() {ios_base::sync_with_stdio(false);cin.tie(nullptr);cout << fixed << setprecision(10);}int main(){int n;cin >> n;vector<int> c(n);vector<pair<int,int>> plus_sort;vector<pair<int,int>> a;vector<pair<int,int>> minus_sort;rep(i, n) cin >> c[i];if(n == 1){cout << abs(c[0]) << endl;return 0;}rep(i, n) {if(c[i] < 0){a.push_back(make_pair(abs(c[i]), -1));}else{a.push_back(make_pair(abs(c[i]), 1));}}rep(i, n) { plus_sort.push_back(make_pair(c[i], i)); }rep(i, n) { minus_sort.push_back(make_pair(c[i], i)); }sort(plus_sort.rbegin(), plus_sort.rend());sort(minus_sort.begin(), minus_sort.end());int plus_index = 0;int minus_index = 0;sort(a.rbegin(), a.rend());bool a_plus = (a[0].second == 1);bool b_plus = (a[1].second == 1);ll a_sum = 0;ll b_sum = 0;set<int> already;rep(i, n){if(i%2 == 0){// Aの手番if(a_plus){while(already.find(plus_sort[plus_index].second) != already.end())plus_index;a_sum += plus_sort[plus_index].first;already.insert(plus_sort[plus_index].second);// already.insert(plus_index);plus_index++;}else{while(already.find(minus_sort[minus_index].second) != already.end())minus_index;a_sum += minus_sort[minus_index].first;// already.insert(minus_index);already.insert(minus_sort[minus_index].second);minus_index++;}}else{// Bの手番if(b_plus){while(already.find(plus_sort[plus_index].second) != already.end())plus_index;b_sum += plus_sort[plus_index].first;already.insert(plus_sort[plus_index].second);plus_index++;}else{while(already.find(minus_sort[minus_index].second) != already.end())minus_index;b_sum += minus_sort[minus_index].first;already.insert(minus_sort[minus_index].second);minus_index++;}}}cout << abs(a_sum) - abs(b_sum) << endl;return 0;}