結果

問題 No.193 筒の数式
ユーザー itezpaceitezpace
提出日時 2016-07-08 10:31:25
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 2 ms / 1,000 ms
コード長 2,331 bytes
コンパイル時間 681 ms
コンパイル使用メモリ 71,628 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-10-12 23:25:43
合計ジャッジ時間 1,327 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 1 ms
5,248 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 2 ms
5,248 KB
testcase_04 AC 1 ms
5,248 KB
testcase_05 AC 1 ms
5,248 KB
testcase_06 AC 2 ms
5,248 KB
testcase_07 AC 1 ms
5,248 KB
testcase_08 AC 1 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
testcase_10 AC 2 ms
5,248 KB
testcase_11 AC 2 ms
5,248 KB
testcase_12 AC 2 ms
5,248 KB
testcase_13 AC 2 ms
5,248 KB
testcase_14 AC 2 ms
5,248 KB
testcase_15 AC 1 ms
5,248 KB
testcase_16 AC 2 ms
5,248 KB
testcase_17 AC 1 ms
5,248 KB
testcase_18 AC 1 ms
5,248 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int calc(std::string)’:
main.cpp:15:13: warning: ‘x’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   15 |   int a,b,f,x;
      |             ^
main.cpp:39:16: warning: ‘c’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   39 |         } else if(c=='/'){
      |                ^~
main.cpp:34:12: warning: ‘a’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   34 |           x=a+b;
      |           ~^~~~

ソースコード

diff #

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <utility>
#include <climits>
using namespace std;

int calc(string s){
  if(s[0]<'0' || s[0]>'9'){
    return INT_MIN;
  } else if(s[s.size()-2]<'0' || s[s.size()-2]>'9'){
    return INT_MIN;
  }
  int a,b,f,x;
  f=0;
  char c,c2;
  string o,p;
  for(int i=0; i<s.size(); ++i){
    if(s[i]>='0' && s[i]<='9'){
      if(f==0){
        o+=s[i];
      } else {
        p+=s[i];
      }
    } else if(s[i]<'0' || s[i]>'9'){
      if(s[i]=='='){
        if(p.size()>1){
          b=stoi(p);
        } else {
          b=p[0]-'0';
        }
        if(c=='+'){
          x=a+b;
        } else if(c=='-'){
          x=a-b;
        } else if(c=='*'){
          x=a*b;
        } else if(c=='/'){
          x=a/b;
        }
      } else {
        if(f==0){
          if(o.size()>1){
            a=stoi(o);
          } else {
            a=o[0]-'0';
          }
          o.clear();
          c=s[i];
          f=1;
        } else {
          if(p.size()>1){
            b=stoi(p);
          } else {
            b=p[0]-'0';
          }
          p.clear();
          if(c=='+'){
            x=a+b;
          } else if(c=='-'){
            x=a-b;
          } else if(c=='*'){
            x=a*b;
          } else if(c=='/'){
            x=a/b;
          }
          a=x;
          c=s[i];
        }
      }
    }
  }
  return x;
}

int main(){
  string s;
  cin>>s;
  int ss,se;
  ss=-1;
  vector<pair<int,int>> vp;
  string s2;
  s2=s;
  s2+='=';
  for(int i=0; i<s2.size(); ++i){
    if(ss==-1 && s[i]>='0' && s[i]<='9'){
      ss=i;
    } else if(ss!=-1 && s[i]<'0' || s[i]>'9'){
      se=i-1;
      if(se-ss>0){
        pair<int,int> p;
        p=make_pair(ss,se);
        vp.push_back(p);
      }
      ss=-1;
    }
  }

  int x,y,z;
  string o;
  o=s;
  o+='=';
  x=calc(o);
  z=x;
  for(int i=0; i<vp.size(); ++i){
    pair<int,int> pa;
    pa=vp[i];
    int l;
    l=pa.second-pa.first;
    for(int j=1; j<=l; ++j){
      string o,o2;
      o=s;
      o2=s;
      rotate(o.begin(),o.begin()+pa.first+j,o.end());
      o+='=';
      y=calc(o);
      if(y>z){
        z=y;
      }
      rotate(o2.rbegin(),o2.rbegin()+pa.first+j,o2.rend());
      o2+='=';
      y=calc(o2);
      if(y>z){
        z=y;
      }
    }
  }
  cout<<z<<endl;
  return 0;
}
0