見出し画像

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";

この記事が気に入ったらサポートをしてみませんか?