結果

問題 No.24 数当てゲーム
ユーザー demudemu
提出日時 2014-11-24 11:13:54
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 1,067 bytes
コンパイル時間 439 ms
コンパイル使用メモリ 58,076 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-06-10 22:03:25
合計ジャッジ時間 999 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 1 ms
5,376 KB
testcase_02 AC 2 ms
5,376 KB
testcase_03 AC 2 ms
5,376 KB
testcase_04 AC 2 ms
5,376 KB
testcase_05 AC 2 ms
5,376 KB
testcase_06 AC 1 ms
5,376 KB
testcase_07 AC 2 ms
5,376 KB
testcase_08 AC 1 ms
5,376 KB
testcase_09 AC 2 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <bitset>
using namespace std;

int main()
{
    string reply;
    int i, j, turn_num;
    short int num=0, turn=0;
    short int answer=~0, mask =~0; // ビット反転

    cin >> turn_num;

    for (i=0; i < turn_num; i++)
    {
        turn = 0;
        for (j=0; j < 4; j++)
        {
            cin >> num;
            num = 1 << num; // 1をnumだけ左にシフト
            turn |= num;
        }
        cin >> reply;
        if (reply == "NO") answer &= ~turn;
        else                   answer &=  turn;
    }

     // turnのビットを反転~させると答えに関係ない
     //上位ビットが全て1になる。そのためマスクで消す。
    mask <<= 10;
    answer ^= mask;   // answerとmaskで異なるビットだけを残す

    for (i=0; i < 10; i++)
    {
        // 最下位ビットが1のときのiが答え
        if (answer & 1==1)  break;
        else answer >>= 1; // 1ビット右にシフト
    }
    cout << i << endl;

    return 0;
}
0