トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

ABC-053-C X: Yet Another Die Game

■■■問題■■■

すぬけくんは6面サイコロで遊ぶことにしました。
サイコロは1から6までの整数がそれぞれの面に書かれており、
向かい合う面に書かれた数の和はどれも7です。

すぬけくんはサイコロの好きな面が上向きになるように置いたのち何回か以下の操作を行います。

●操作:サイコロを手前、奥、左、右のどれかの方向に90度だけ回転させる。
        その後、上を向いている面に書かれた数をyとしてy点得る。

例えば、図のように1と書かれた面が上を向いており、手前側の面に5が、右側の面に4が書かれている状況を考えます。
図に示されるように右方向に回転させることで3と書かれた面が上を向くようにすることが可能です。

その他、左方向に回転させた場合は4と書かれた面が、
手前方向に回転させた場合は 2 と書かれた面が、
奥方向に回転させた場合は 5 と書かれた面が上を向くようにすることが可能です。

すぬけくんが合計でx点以上得るために必要な最小の操作回数を求めなさい。

■■■入力■■■

x

●1 <= x <= 10の15乗
●xは整数

■■■出力■■■

答えを出力せよ。


C#のソース

using System;
using System.Collections.Generic;

class Program
{
    static string InputPattern = "Input1";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("7");
            //2
        }
        else if (InputPattern == "Input2") {
            WillReturn.Add("149696127901");
            //27217477801
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        long x = long.Parse(InputList[0]);

        long Answer = 0;
        long Syou = x / 11;
        Answer += Syou * 2;

        long ModVal = x % 11;
        if (1 <= ModVal && ModVal <= 6) Answer++;
        if (7 <= ModVal && ModVal <= 10) Answer += 2;

        Console.WriteLine(Answer);
    }
}


解説

6と5の面を繰り返すのが最適となります。