abc079 c atcoder

ABC079 C - 電車チケット

ABC079 C - 電車チケット
Feb. 2, 2020, 1:52 p.m.

目次

問題

https://atcoder.jp/contests/abc079/tasks/abc079_c

$0 \geq A, B, C, D \geq 9$である4つの整数が与えれるので、その間に3つの+か-を入れて計算して答えが$7$になる組み合わせを答える問題.

解説

数字列は4文字固定で各文字の間に必ず+か-が入るので全通り試しても$2^3$通りしかない.

計算量

演算は+と-の2通りで、それが3箇所固定なので、計算ステップ数は$2^3$.

$$O(1)$$

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
string S;
char ops[] = { '-', '+' };

void input() {
  cin >> S;
}

#define ctoi(x) (x - '0')

void solve() {
  Int x = 0;
  loop(first, 0, 2) {
    loop(second, 0, 2) {
      loop(third, 0, 2) {
        x = ctoi(S[0]);
        if (first) x += ctoi(S[1]);
        else x -= ctoi(S[1]);
        if (second) x += ctoi(S[2]);
        else x -= ctoi(S[2]);
        if (third) x += ctoi(S[3]);
        else x -= ctoi(S[3]);
        if (x == 7) {
          cout << S[0] << ops[first] << S[1] << ops[second] << S[2] << ops[third] << S[3] << "=7" << endl;
          return;
        }
      }
    }
  }
  cout << -1 << endl;
}

int main(void) {
  input();
  solve();
  return 0;
}