けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 053 C - X: Yet Another Die Game (ARC 068 C) (5Q, 茶色, 300 点)

ちょっとした算数の問題!

問題概要

サイコロを転がしていく。サイコロの上の目の値を足していく。

その総和が  X 以上となるまでの最小回数を求めよ。

制約

  •  1 \le X \le 10^{18}

考えたこと

6, 5, 6, 5, ... と繰り返していくのが最適である。それを求めるために、「2 回で 11」を限界まで繰り返したあとで、余ったところの帳尻を合わせる方針をとろう。

まず、res = X / 11 * 2 回移動して、r = X % 11 だけ余る。

  •  0 \lt r \le 6 のとき:res を 1 増やす
  •  6 \lt r のとき:res を 2 増やす

とすればよい。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long x;
    cin >> x;
    
    long long res = (x / 11) * 2;
    long long r = x % 11;
    if (r > 0) res++;
    if (r > 6) res++;
    cout << res << endl;
}