結果
問題 |
No.3130 Twin's Add Max Min Game
|
ユーザー |
![]() |
提出日時 | 2025-04-25 22:25:31 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 786 ms / 2,000 ms |
コード長 | 1,042 bytes |
コンパイル時間 | 4,123 ms |
コンパイル使用メモリ | 255,064 KB |
実行使用メモリ | 8,820 KB |
最終ジャッジ日時 | 2025-04-25 22:26:02 |
合計ジャッジ時間 | 20,121 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 56 |
ソースコード
#include <stdio.h> #include <atcoder/all> #include <bits/stdc++.h> using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 4000000000000000001LL int main(){ int n; cin>>n; vector<long long> a(n); rep(i,n)cin>>a[i]; long long x = 0,y = 0,z = 0; rep(i,n){ string s; cin>>s; if(s=="add")x++; if(s=="min")z++; if(s=="max")y++; } long long ok =0,ng = 300000000000000; while(ng-ok>1LL){ long long mid = (ok+ng)/2; vector<long long> mo,le; rep(i,n){ if(a[i] >= mid)mo.push_back(a[i]); else le.push_back(a[i]); } if(z>mo.size()){ ng = mid; continue; } if(z<mo.size()){ ok = mid; continue; } long long t = 0; if(x==0){ rep(i,le.size())t = max(t,le[i]); } else if(y==0){ rep(i,le.size())t += le[i]; } else{ sort(le.begin(),le.end()); t = le.back(); rep(i,x-1)t += le[i]; } if(t >= mid){ ok = mid; } else ng = mid; } cout<<ok<<endl; return 0; }