結果
問題 | No.1150 シュークリームゲーム(Easy) |
ユーザー |
![]() |
提出日時 | 2020-08-12 19:31:32 |
言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 19 ms / 2,000 ms |
コード長 | 2,214 bytes |
コンパイル時間 | 4,466 ms |
コンパイル使用メモリ | 164,700 KB |
実行使用メモリ | 8,524 KB |
最終ジャッジ日時 | 2024-10-09 18:33:29 |
合計ジャッジ時間 | 6,927 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 43 |
ソースコード
#include<bits/stdc++.h>using namespace std;#define int long long#define ii pair <int, int>#define app push_back#define all(a) a.begin(), a.end()#define bp __builtin_popcountll#define ll long long#define mp make_pair#define f first#define s second#define Time (double)clock()/CLOCKS_PER_SEC#define debug(x) std::cout << #x << ": " << x << '\n';int solve(vector <int> l, vector <int> r) {auto half = [] (vector <int> a) {int sz = a.size();int ans = 0;for (int i = 0; i < sz/2; ++i) {ans += a[i];ans -= a[sz - 1 - i];}return ans;};auto mid = [] (vector <int> a) {int sz = a.size();assert(sz&1);return a[sz/2];};if (l.size() % 2 == 0 && r.size() % 2 == 0) {return half(l) + half(r);}else if (l.size() % 2 && r.size() % 2 == 0) {return half(l) + half(r) + mid(l);}else if (l.size() % 2 == 0 && r.size() % 2) {return half(l) + half(r) + mid(r);}else {assert(0);}}signed main() {#ifdef HOMEfreopen("input.txt", "r", stdin);#else#define endl '\n'ios_base::sync_with_stdio(0); cin.tie(0);#endifint n;cin >> n;int s, t;cin >> s >> t;s--; t--;vector <int> a(n);for (int i = 0; i < n; ++i)cin >> a[i];vector <int> l, r;for (int i = min(s, t) + 1; i != max(s, t); i++) {l.app(a[i]);}if (s > t)reverse(all(l));for (int i = (max(s, t) + 1) % n; i != min(s, t); i = (i + 1) % n) {r.app(a[i]);}if (s < t)reverse(all(r));auto shift = [] (vector <int> a) {vector <int> ans;for (int i = 1; i < a.size(); ++i)ans.app(a[i]);return ans;};auto rev = [] (vector <int> a) {reverse(all(a));return a;};if (l.size() % 2 && r.size() % 2) {cout << max(l[0] - solve(rev(shift(l)), rev(r)), r[0] - solve(rev(l), rev(shift(r)))) + a[s] - a[t] << endl;}else {cout << solve(l, r) + a[s] - a[t] << endl;}}