ARC 105-Aの解答
ARC 105-A Fourtune Cookiesの解答を書きます。問題はこちらから。
Difficulty : 5(灰色)
お菓子が4個ありまして、それぞれにおいしさポイントなるものが設定されているそうです。1個以上のお菓子を食べるときに、食べたお菓子のおいしさの総和と、残った総和が等しくなるかを判定する問題。
なにかスマートにやる方法を考えましたが、結局愚直に書きました。一応、3個食べる場合は、残りの1個を食べる場合と等しくなるので、本当に全部書いたわけではないですが、、(4C1=4C3です)
とはいうものの、少しぐらいスマートに書けないかとfor文で回しました。以下実装です。
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
using ll = long long;
using P = pair<int, int>;
int main()
{
vector<int> a(4);
int sum=0;
rep(i,4)
{
cin >> a[i];
sum += a[i];
}
rep(i,4){
if(sum-a[i] == a[i])
{
cout << "Yes" << endl;
return 0;
}
}
rep(i,4)rep(j,4)
{
if(i>=j) continue;
int b = a[i]+a[j];
if(sum-b == b)
{
cout << "Yes" << endl;
return 0;
}
}
cout << "No" << endl;
return 0;
}
前回と同様にA問題は簡単でしたね。
試験中に提出したコードの一部を載せておきます。「if文とは?」として教科書に載ってそうな程シンプルです。
if (sum - a == a) ans = "Yes";
else if (sum - b == b) ans = "Yes";
else if (sum - c == c) ans = "Yes";
else if (sum - d == d) ans = "Yes";
else if (sum - a - b == a + b) ans = "Yes";
else if (sum - a - c == a + c) ans = "Yes";
else if (sum - a - d == a + d) ans = "Yes";
else if (sum - b - c == b + c) ans = "Yes";
else if (sum - b - d == b + d) ans = "Yes";
else if (sum - c - d == c + d) ans = "Yes";
else ans = "No";
この記事が気に入ったらサポートをしてみませんか?