結果
| 問題 | No.297 カードの数式 | 
| コンテスト | |
| ユーザー |  data9824 | 
| 提出日時 | 2016-02-01 20:09:45 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 2 ms / 1,000 ms | 
| コード長 | 1,542 bytes | 
| コンパイル時間 | 1,131 ms | 
| コンパイル使用メモリ | 68,204 KB | 
| 実行使用メモリ | 5,248 KB | 
| 最終ジャッジ日時 | 2024-12-26 02:28:19 | 
| 合計ジャッジ時間 | 1,832 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 23 | 
ソースコード
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
	int n;
	cin >> n;
	vector<string> c(n);
	for (int i = 0; i < n; ++i) {
		cin >> c[i];
	}
	int addCount = 1;
	int subCount = 0;
	vector<int> digits;
	for (size_t i = 0; i < c.size(); ++i) {
		if (c[i] == "+") {
			++addCount;
		} else if (c[i] == "-") {
			++subCount;
		} else {
			digits.push_back(c[i][0] - '0');
		}
	}
	sort(digits.begin(), digits.end());
	long long maxValue = 0;
	for (int i = 0; i < subCount; ++i) {
		maxValue -= digits[i];
	}
	for (int i = subCount; i < subCount + addCount - 1; ++i) {
		maxValue += digits[i];
	}
	long long lastValue = 0;
	for (int i = digits.size() - 1; i >= subCount + addCount - 1; --i) {
		lastValue *= 10LL;
		lastValue += digits[i];
	}
	maxValue += lastValue;
	long long minValue = 0;
	if (subCount == 0) {
		int currentDigit = digits.size() - 1;
		long long multiplier = 1LL;
		while (currentDigit >= 0) {
			for (int i = 0; i < addCount && currentDigit >= 0; 
				++i, --currentDigit) {
				minValue += digits[currentDigit] * multiplier;
			}
			multiplier *= 10LL;
		}
	} else {
		for (int i = 0; i < addCount; ++i) {
			minValue += digits[i];
		}
		for (int i = addCount; i < addCount + subCount - 1; ++i) {
			minValue -= digits[i];
		}
		long long lastValue = 0;
		for (int i = digits.size() - 1; i >= subCount + addCount - 1; --i) {
			lastValue *= 10LL;
			lastValue += digits[i];
		}
		minValue -= lastValue;
	}
	cout << maxValue << " " << minValue << endl;
	return 0;
}
            
            
            
        