結果
| 問題 |
No.297 カードの数式
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-04-10 15:46:15 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 1,944 bytes |
| コンパイル時間 | 1,636 ms |
| コンパイル使用メモリ | 174,384 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-18 05:41:02 |
| 合計ジャッジ時間 | 2,494 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 23 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
ios::sync_with_stdio( 0 );
int N;
int plus = 0, minus = 0;
static int cnt[ 10 ];
cin >> N;
for( int i = 0; i < N; ++i ){
string s;
cin >> s;
if( s == "+" ){
++plus;
} else if( s == "-" ){
++minus;
} else{
++cnt[ s[ 0 ] - '0' ];
}
}
int ans_max = 0, ans_min = 0;
{
deque< int > dq;
for( int i = 0; i < 10; ++i ){
for( int j = 0; j < cnt[ i ]; ++j ){
dq.emplace_back( i );
}
}
while( dq.size() > plus + minus ){
ans_max = ans_max * 10 + dq.back();
dq.pop_back();
}
for( int i = 0; i < plus; ++i ){
ans_max += dq.back();
dq.pop_back();
}
for( int i = 0; i < minus; ++i ){
ans_max -= dq.front();
dq.pop_front();
}
}
if( minus ){
deque< int > dq;
for( int i = 0; i < 10; ++i ){
for( int j = 0; j < cnt[ i ]; ++j ){
dq.emplace_back( i );
}
}
ans_min += dq.front(), dq.pop_front();
int x = 0;
while( dq.size() >= plus + minus ){
x = x * 10 + dq.back();
dq.pop_back();
}
ans_min -= x;
--minus;
for( int i = 0; i < plus; ++i ){
ans_min += dq.front();
dq.pop_front();
}
for( int i = 0; i < minus; ++i ){
ans_min -= dq.back();
dq.pop_back();
}
assert( dq.empty() );
} else{
deque< int > dq;
for( int i = 0; i < 10; ++i ){
for( int j = 0; j < cnt[ i ]; ++j ){
dq.emplace_back( i );
}
}
vector< int > vec( plus + 1 );
int ptr = 0;
while( not dq.empty() ){
int u = dq.front();
dq.pop_front();
vec[ ptr ] = vec[ ptr ] * 10 + u;
++ptr;
if( ptr == vec.size() ){
ptr = 0;
}
}
for( int i = 0; i < vec.size(); ++i ){
ans_min += vec[ i ];
}
}
cout << ans_max << " " << ans_min << endl;
return 0;
}