結果
問題 | No.297 カードの数式 |
ユーザー |
|
提出日時 | 2015-11-07 00:31:29 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 3 ms / 1,000 ms |
コード長 | 3,077 bytes |
コンパイル時間 | 1,177 ms |
コンパイル使用メモリ | 92,452 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-26 02:23:15 |
合計ジャッジ時間 | 2,172 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
#include <iostream> #include <iomanip> #include <vector> #include <algorithm> #include <numeric> #include <functional> #include <cmath> #include <queue> #include <stack> #include <set> #include <map> #include <sstream> #include <string> #define repd(i,a,b) for (int i=(a);i<(b);i++) #define rep(i,n) repd(i,0,n) #define var auto #define mod 1000000007 #define inf 2147483647 #define nil -1 typedef long long ll; using namespace std; int inputValue(){ int a; cin >> a; return a; } template <typename T> void output(T a, int precision) { if(precision > 0){ cout << fixed << setprecision(precision) << a << "\n"; } else{ cout << a << "\n"; } } // end of template int main() { cin.tie(0); // source code int N; cin >> N; vector<int> C; int plus = 0; int minus = 0; rep(i, N){ char c; cin >> c; if (c == '+') { plus++; } else if (c == '-'){ minus++; } else{ C.push_back(c - '0'); } } sort(C.begin(), C.end()); ll retmax = 0; ll retmin = 0; int ops = plus + minus; if (plus == 0) { ll big = 0; reverse(C.begin(), C.end()); rep(i, C.size() - ops){ big *= 10; big += C[i]; } retmax = big; retmin = C[C.size() - 1]; repd(i, (int)C.size() - ops, C.size()){ retmax -= C[i]; if (i != C.size() - 1) { retmin -= C[i]; } } retmin -= big; cout << retmax << " " << retmin << endl; } else if(minus == 0){ ll retmin = 0; ll retmax = 0; vector<ll> num(ops + 1, 0); rep(i, C.size() - ops){ retmax *= 10; retmax += C[C.size() - 1 - i]; } repd(i, (int)C.size() - ops, C.size()){ retmax += C[C.size() - 1 - i]; } rep(i, C.size()){ num[i % (ops + 1)] *= 10; num[i % (ops + 1)] += C[i]; } rep(i, num.size()){ retmin += num[i]; } cout << retmax << " " << retmin << endl; } else{ ll big = 0; reverse(C.begin(), C.end()); rep(i, C.size() - ops){ big *= 10; big += C[i]; } int tmpP = plus; retmax = big; // max repd(i, (int)C.size() - ops, C.size()){ if (tmpP) { retmax += C[i]; tmpP--; continue; } retmax -= C[i]; } int tmpM = minus - 1; retmin = -big; repd(i, (int)C.size() - ops, C.size()){ if (tmpM) { retmin -= C[i]; tmpM--; continue; } retmin += C[i]; } cout << retmax << " " << retmin << endl; } return 0; }