結果
| 問題 |
No.193 筒の数式
|
| コンテスト | |
| ユーザー |
158b
|
| 提出日時 | 2015-05-25 14:49:41 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,398 bytes |
| コンパイル時間 | 410 ms |
| コンパイル使用メモリ | 65,336 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-06 08:19:54 |
| 合計ジャッジ時間 | 1,091 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 10 WA * 6 |
コンパイルメッセージ
main.cpp: In function ‘int func(std::string)’:
main.cpp:25:41: warning: overflow in conversion from ‘long int’ to ‘int’ changes value from ‘-9223372036854775807’ to ‘1’ [-Woverflow]
25 | return -LONG_MAX;
| ^~~~~~~~
main.cpp:45:25: warning: overflow in conversion from ‘long int’ to ‘int’ changes value from ‘-9223372036854775807’ to ‘1’ [-Woverflow]
45 | return -LONG_MAX;
| ^~~~~~~~
ソースコード
#include <iostream>
#include <algorithm>
#include <functional>
#include <string>
#include <limits.h>
#include <vector>
#include <numeric>
using namespace std;
int 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