結果
問題 | No.297 カードの数式 |
ユーザー |
![]() |
提出日時 | 2015-11-06 23:36:29 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 3 ms / 1,000 ms |
コード長 | 1,643 bytes |
コンパイル時間 | 965 ms |
コンパイル使用メモリ | 79,696 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-26 02:17:03 |
合計ジャッジ時間 | 2,018 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
#include <iostream>#include <vector>#include <cstdio>#include <sstream>#include <map>#include <string>#include <algorithm>#include <queue>#include <cmath>#include <set>using namespace std;int main(){int n;cin >> n;vector<string> s(n);for(int i=0; i<n; i++){cin >> s[i];}vector<int> cnt_(10, 0);int plus = 0, minus = 0;for(int i=0; i<n; i++){if(s[i] == "+") plus++;else if(s[i] == "-") minus++;else cnt_[s[i][0] - '0']++;}long long ans_min=0, ans_max=0;{auto cnt = cnt_;for(int x=0; x<minus; x++){for(int i=0; i<10; i++){if(cnt[i] == 0) continue;ans_max -= i;cnt[i]--;break;}}for(int x=0; x<plus; x++){for(int i=0; i<10; i++){if(cnt[i] == 0) continue;ans_max += i;cnt[i]--;break;}}long long d = 1;int i = 0;while(i<10){if(cnt[i] == 0){i++;}else{ans_max += d*i;d *= 10;cnt[i]--;}}}if(minus){auto cnt = cnt_;for(int x=0; x<=plus; x++){for(int i=0; i<10; i++){if(cnt[i] == 0) continue;ans_min += i;cnt[i]--;break;}}while(minus>1){for(int i=0; i<10; i++){if(cnt[i] == 0) continue;ans_min -= i;cnt[i]--;break;}minus--;}long long d = 1;int i = 0;while(i<10){if(cnt[i] == 0){i++;}else{ans_min -= d*i;d *= 10;cnt[i]--;}}}else{auto cnt = cnt_;int x = 0;int i = 9;while(i>=0){if(cnt[i] == 0){i--;continue;}ans_min += i*pow(10, x/(plus+1));cnt[i]--;x++;}}cout << ans_max << " " << ans_min << endl;return 0;}