結果
| 問題 |
No.193 筒の数式
|
| コンテスト | |
| ユーザー |
158b
|
| 提出日時 | 2015-05-26 12:33:17 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 1,401 bytes |
| コンパイル時間 | 553 ms |
| コンパイル使用メモリ | 65,748 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-06 08:44:49 |
| 合計ジャッジ時間 | 1,036 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 16 |
ソースコード
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
#include <limits.h>
#include <vector>
#include <numeric>
using namespace std;
long func(string a){
long total = 0;
long num = 0;
bool flg = false; //左の項が存在しているか。
bool op = true; //true足し算/false引き算
for(int i=0; i<a.length(); i++){
//数値が見つかった場合
if(a[i] != '+' && a[i] != '-'){
flg = true;
num *= 10;
num += a[i] - '0';
//記号が見つかった場合
}else{
if(!flg){
return -LONG_MAX;
}else{
if(op){
total += num;
}else{
total -= num;
}
num = 0;
flg = false;
if(a[i] == '+'){
op = true;
}else{
op = false;
}
}
}
}
//最後の項が未処理
if(!flg){
return -LONG_MAX;
}else{
if(op){
total += num;
}else{
total -= num;
}
}
return total;
}
int main(){
string data;
long kekka;
long ans = -LONG_MAX;
char save;
cin >> data;
for(int i=0; i<data.length(); i++){
//cout << "■" << data << endl;
kekka = func(data);
//cout << "result:" << kekka << endl;
//ans更新
if(kekka > ans){
ans = kekka;
}
//文字列をずらす処理(左循環シフト)
save = data[0];
for(int ii=0; ii<data.length()-1; ii++){
data[ii] = data[ii+1];
}
data[data.length() - 1] = save;
}
cout << ans << endl;
return 0;
}
158b