【AtCoder】ABC 429 B - N - 1

atcoder.jp favicon

実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 24 / NoviSteps: 6Q / 配点: 200 点

問題概要

長さ NN の整数列 AA と整数 MM が与えられる。 AANN 個の要素から 11 個を取り除くことで、残りの N1N-1 個の要素の和をちょうど MM にできるか判定せよ。

制約

  • 2N1002\le N\le 100
  • 0M100000\le M\le 10000
  • 0Ai1000\le A_i\le 100
  • 入力される値は全て整数

考察

仮に Aj(1jN)A_j \: (1 \leq j \leq N) を取り除いたとすると、残り N1N-1 個の要素の和 MM

M=i=1NAiAjM = \sum_{i=1}^{N} A_i - A_j

と表せる。これを変形すると

Aj=i=1NAiMA_j = \sum_{i=1}^{N} A_i - M

となるので、AA の総和を求めて、 AAi=1NAiM\sum_{i=1}^{N} A_i - M という要素があるかを調べればよい。

実装例

CPP
1.#include <bits/stdc++.h>
2.using namespace std;
3.
4.#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)
5.
6.// ======================================== //
7.
8.int main()
9.{
10. int N, M;
11. cin >> N >> M;
12. vector<int> A(N);
13. rep(i, 0, N) cin >> A[i];
14.
15. int sum = 0;
16. rep(i, 0, N) sum += A[i];
17.
18. rep(i, 0, N)
19. {
20. if (sum - A[i] == M)
21. {
22. cout << "Yes" << endl;
23. return 0;
24. }
25. }
26.
27. cout << "No" << endl;
28.
29. return 0;
30.}
atcoder.jp favicon

実装時間: 5 分以内

コメント

A 問題に続いて、これも素直な全探索で解ける問題だった。