ABC045 (ARC061) C - たくさんの数式
問題はこちら atcoder.jp
方針
+
が入る場所は, の各数字の間 ヶ所です。それぞれの箇所について,+
が入っている状態を1
,何も入っていない状態を0
とすれば,bit全探索が適用できます。
各数式の値を計算するプロセスはコードを見てください。
コード
#include <bits/stdc++.h> using namespace std; #define REP(i,n) for(int i=0; i<(n); i++) long long value(int bit); string s; int n; int main(){ cin>>s; n=s.size()-1; // '+'が入るスペースの数 long long sum=0; for(int bit=0; bit<(1<<n); bit++){ sum+=value(bit); } cout<<sum<<endl; } long long value(int bit){ long long v=0; // 0文字目 string c=s.substr(0,1); REP(i,n){ // i番目が'+'なら if(bit&(1<<i)){ v+=stoll(c); c.clear(); c=s.substr(i+1,1); // そうでないなら }else{ c+=s.substr(i+1,1); } } // 最後に残っている部分を足す v+=stoll(c); return v; }