AtCoder Beginner Contest 092

ぼちぼち出来た. Dはとりたかったがとれず.

A - Traveling Budget

AとB, CとDの大小比較をして小さい方を選ぶ.

#include <bits/stdc++.h>

using namespace std;

int main(void) {
  int a, b, c, d;
  cin >> a >> b >> c >> d;

  cout << min(a, b) + min(c, d) << endl;
}

B - Chocolate

i人目の参加者は(D - 1) / A[i] + 1個チョコレートを食べる.
これを各A[i]ごとに計算して足していき, 最後にXを足す.

#include <bits/stdc++.h>

using namespace std;

int main(void) {
  int n, d, x;
  cin >> n >> d >> x;
  int a[n];
  for(int i = 0; i < n; i++) {
    cin >> a[i];
  }

  int ch = 0;
  for(int i = 0; i < n; i++) {
    ch += (d - 1) / a[i] + 1;
  }
  ch += x;
  cout << ch << endl;
}

C - Traveling Plan

まず予定通り観光した場合の金額の総和を求める.
i番目の観光スポットを訪れなかった場合, 金額の総和は,
(予定通り観光した場合の金額) - (i-1番目からi番目に行く金額) - (i番目からi+1番目に行く金額) + (i-1番目からi+1番目に行く金額)
となる.
i = 1, Nの場合原点も考慮する.

#include <bits/stdc++.h>

using namespace std;

int abs(int x) {
  if(x < 0) {
    return (-1) * x;
  }
  else {
    return x;
  }
}

int main(void) {
  int n;
  cin >> n;
  int a[n];
  for(int i = 0; i < n; i++) {
    cin >> a[i];
  }

  long long sum = abs(a[0]);
  for(int i = 1; i < n; i++) {
    sum += abs(a[i] - a[i - 1]);
  }
  sum += abs(a[n - 1]);

  cout << sum - abs(a[0]) - abs(a[1] - a[0]) + abs(a[1]) << endl;
  for(int i = 1; i < n - 1; i++) {
    long long tmp = sum;
    tmp = tmp - abs(a[i] - a[i - 1]) - abs(a[i + 1] - a[i]) + abs(a[i + 1] - a[i - 1]);
    cout << tmp << endl;
  }
  cout << sum - abs(a[n - 1] - a[n - 2]) - abs(a[n - 1]) + abs(a[n - 2]) << endl;
}

D - Grid Components

本番では解けず. 解説PDFを読みながら解いた.
イデア勝負の問題だったので諦めずにもう少し時間をかければよかった.
解答見ながら実装してる時グリッドのサイズを出力し忘れて時間溶かした.
問題はちゃんと読もうね.
ソースのみ以下に記載.

#include <bits/stdc++.h>

using namespace std;

int main(void) {
  int a, b;
  cin >> a >> b;

  string ans[100];
  for(int i = 0; i < 50; i++) {
    for(int j = 0; j < 100; j++) {
      ans[i] += '.';
      ans[i + 50] += '#';
    }
  }

  int count = 1;
  for(int i = 0; i < 49; i += 2) {
    int tmp = i % 2;
    for(int j = 0 + tmp; j < 100; j += 2) {
      if(b == count) {
	break;
      }
      ans[i][j] = '#';
      count++;
    }
  }

  count = 1;
  for(int i = 51; i < 100; i += 2) {
    int tmp = i % 2;
    for(int j = 0 + tmp; j < 100; j += 2) {
      if(a == count) {
	break;
      }
      ans[i][j] = '.';
      count++;
    }
  }

  cout << "100 100" << endl;
  
  for(int i = 0; i < 100; i++) {
    cout << ans[i] << endl;
  }
}