この問題に1時間かけてしまったばっかりに、青から水に落ちました・・・。
問題
https://codeforces.com/contest/1436/problem/A
問題概要
整数が含まれる長さnの配列aと、別に整数mが与えられる。
配列aの中身を任意に並べ替えることで
が、mと等しくなるようにできるかどうかを判定せよ。ただし、除算結果に対して丸めは発生しないものとする。
考察
シグマを展開しますと、以下のようになります。
は一度しか現れないので、つまりです。
は二度現れるので、つまりです。
は三度現れるので、つまりです。
...
はn度現れるので、つまりです。
ようするに、配列aがどのように並んでいるかは全く関係なく、計算結果はになります。
よってこの問題は、配列aの要素の和とmが等しいか否か、という問題と同じことなのでした。
#include <bits/stdc++.h> using namespace std; #define FOR(i, m, n) for (int i = (m); i < (n); i++) #define REP(i, n) FOR(i, 0, (n)) int main() { int t; cin >> t; while (t--) { int n, m; cin >> n >> m; int a; int sum = 0; REP(i, n) { cin >> a; sum += a; } cout << (sum == m ? "YES" : "NO") << endl; } return 0; }
感想
こんな簡単な算数に1時間かける青コーダー、おる?