C-merのブログ

ザ・雑記

三年目の初学者(5問目)

問題
topcoder SRM 601 div1 easy
TopCoder Statistics - Problem Statement


使用言語
C++

サンプルケースの検証
(リンゴの個数, オレンジの個数)で表すとする。

{7, 4, 5}
{1, 10, 2}のとき
1個の時 (3, 0)~(0, 3)
2個の時 (6, 0)~(1, 5)
3個の時 (9, 0)~(3, 6)
...
赤字のところの差が各個数-1になる
→ max_a += min(i, apple[j]);
min_a += max(0, i - orange[j]);

所感
・問題の理解がしにくかった
・実際に紙に書くのは大事

コード

int check_combination(int i, vector<int> apple, vector<int> orange)
{
  int max_a = 0, min_a = 0;

  for (int j = 0; j < apple.size(); j++) {
    max_a += min(i, apple[j]);
    min_a += max(0, i - orange[j]);
  }

  return max_a - min_a + 1;
}

class WinterAndPresents {
    public:
    long long getNumber(vector<int> apple, vector<int> orange) {
      vector<int> sum; long long ans = 0;

      for (int i = 0; i < apple.size(); i++) {
        sum.push_back(apple[i] + orange[i]);
      }

      for (int i = 1; i <= *min_element(sum.begin(), sum.end()); i++) {
        ans += check_combination(i, apple, orange);
      }
        return ans;
    }
};