提出 #373307


ソースコード 拡げる

#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <utility>
#include <vector>
using namespace std;

#define M (1<<18)

inline long long next(long long x, long long B) {
    return (x >> 1) ^ ((x & 1) * B);
}

inline long long supernext(long long x, const vector<long long> &B) {
    long long ret = 0;
    for (size_t i = 0; i < B.size(); ++i) {
        ret ^= ((x >> i) & 1) * B[i];
    }
    return ret;
}

inline long long prev(long long x, long long B, int Bs) {
    return (x << 1) ^ (((x >> Bs) & 1) * (B * 2 + 1));
}

long long solve0(long long A, long long B, long long X) {
    long long x;

    x = A;
    for (int i = 0; i < M * 100; ++i) {
        if (x == X) {
            return i;
        }
        x = next(x, B);
    }
    return -1;
}

long long solve(long long A, long long B, long long X) {
    long long x;
    map<long long, int> offset;

    x = A;
    for (int i = 0; i < M; ++i) {
        if (x == X) {
            return i;
        }
        x = next(x, B);
    }

    int Bs = 0;
    for (int i = 0; i < 40; ++i) {
        if ((1LL << i) & B) {
            Bs = i;
        }
    }

    if (X >= (2LL<<Bs)) {
        return -1;
    }

    x = X;
    for (int i = 0; i < M; ++i) {
        if (offset.count(x) == 0)
            offset[x] = i;
        x = prev(x, B, Bs);
    }

    int mat[36][36];
    memset(mat, 0x00, sizeof(mat));
    for (int i = 0; i < 36; ++i) {
        if (i + 1 < 36)
            mat[i][i+1] = 1;
        mat[i][0] = (B >> i) & 1;
    }
    for (int t = 0; t < 18; ++t) {
        int mat2[36][36];
        memset(mat2, 0x00, sizeof(mat2));
        for (int i = 0; i < 36; ++i) {
            for (int j = 0; j < 36; ++j) {
                for (int k = 0; k < 36; ++k) {
                    mat2[i][j] ^= mat[i][k] * mat[k][j];
                }
            }
        }
        memcpy(mat, mat2, sizeof(mat));
    }

    vector<long long> B2(36);
    for (int i = 0; i < 36; ++i) {
        for (int j = 0; j < 36; ++j) {
            B2[i] += static_cast<long long>(mat[j][i]) << j;
        }
    }

    x = A;
    for (int i = 0; i < M; ++i) {
        if (offset.count(x)) {
           return offset[x] + static_cast<long long>(i) * M;
        }
        x = supernext(x, B2);
    }

    return -1;
}

int main() {
    long long A, B, X;
    cin >> A >> B >> X;
    cout << solve(A, B, X) << endl;
}

提出情報

提出日時
問題 K - 乱数調整
ユーザ ClarifierEP
言語 C++ (GCC 4.9.2)
得点 300
コード長 2605 Byte
結果 AC
実行時間 429 ms
メモリ 17196 KiB

ジャッジ結果

セット名 Subtask All
得点 / 配点 30 / 30 270 / 270
結果
AC × 20
AC × 63
セット名 テストケース
Subtask subtask_00.txt, subtask_01.txt, subtask_02.txt, subtask_03.txt, subtask_04.txt, subtask_05.txt, subtask_06.txt, subtask_07.txt, subtask_08.txt, subtask_09.txt, subtask_10.txt, subtask_11.txt, subtask_12.txt, subtask_13.txt, subtask_14.txt, subtask_15.txt, subtask_16.txt, subtask_17.txt, subtask_18.txt, subtask_19.txt
All scrambled_00.txt, scrambled_01.txt, scrambled_02.txt, scrambled_03.txt, scrambled_04.txt, scrambled_05.txt, scrambled_06.txt, scrambled_07.txt, scrambled_08.txt, scrambled_09.txt, scrambled_10.txt, scrambled_11.txt, scrambled_12.txt, scrambled_13.txt, scrambled_14.txt, scrambled_15.txt, scrambled_16.txt, scrambled_17.txt, scrambled_18.txt, scrambled_19.txt, scrambled_20.txt, scrambled_21.txt, scrambled_22.txt, scrambled_23.txt, scrambled_24.txt, scrambled_25.txt, scrambled_26.txt, scrambled_27.txt, scrambled_28.txt, scrambled_29.txt, scrambled_30.txt, scrambled_31.txt, scrambled_32.txt, scrambled_33.txt, scrambled_34.txt, scrambled_35.txt, scrambled_36.txt, scrambled_37.txt, scrambled_38.txt, scrambled_39.txt, scrambled_40.txt, scrambled_41.txt, scrambled_42.txt, subtask_00.txt, subtask_01.txt, subtask_02.txt, subtask_03.txt, subtask_04.txt, subtask_05.txt, subtask_06.txt, subtask_07.txt, subtask_08.txt, subtask_09.txt, subtask_10.txt, subtask_11.txt, subtask_12.txt, subtask_13.txt, subtask_14.txt, subtask_15.txt, subtask_16.txt, subtask_17.txt, subtask_18.txt, subtask_19.txt
ケース名 結果 実行時間 メモリ
scrambled_00.txt AC 25 ms 800 KiB
scrambled_01.txt AC 26 ms 932 KiB
scrambled_02.txt AC 24 ms 928 KiB
scrambled_03.txt AC 54 ms 920 KiB
scrambled_04.txt AC 23 ms 924 KiB
scrambled_05.txt AC 25 ms 728 KiB
scrambled_06.txt AC 25 ms 924 KiB
scrambled_07.txt AC 25 ms 916 KiB
scrambled_08.txt AC 25 ms 928 KiB
scrambled_09.txt AC 25 ms 800 KiB
scrambled_10.txt AC 26 ms 804 KiB
scrambled_11.txt AC 23 ms 796 KiB
scrambled_12.txt AC 25 ms 836 KiB
scrambled_13.txt AC 26 ms 804 KiB
scrambled_14.txt AC 27 ms 800 KiB
scrambled_15.txt AC 421 ms 17184 KiB
scrambled_16.txt AC 26 ms 920 KiB
scrambled_17.txt AC 25 ms 924 KiB
scrambled_18.txt AC 270 ms 17188 KiB
scrambled_19.txt AC 281 ms 17180 KiB
scrambled_20.txt AC 275 ms 17184 KiB
scrambled_21.txt AC 266 ms 17120 KiB
scrambled_22.txt AC 251 ms 17180 KiB
scrambled_23.txt AC 265 ms 17180 KiB
scrambled_24.txt AC 331 ms 17180 KiB
scrambled_25.txt AC 263 ms 17176 KiB
scrambled_26.txt AC 275 ms 17188 KiB
scrambled_27.txt AC 301 ms 17184 KiB
scrambled_28.txt AC 27 ms 796 KiB
scrambled_29.txt AC 25 ms 924 KiB
scrambled_30.txt AC 24 ms 928 KiB
scrambled_31.txt AC 224 ms 9000 KiB
scrambled_32.txt AC 25 ms 732 KiB
scrambled_33.txt AC 23 ms 920 KiB
scrambled_34.txt AC 25 ms 800 KiB
scrambled_35.txt AC 25 ms 796 KiB
scrambled_36.txt AC 25 ms 920 KiB
scrambled_37.txt AC 266 ms 17176 KiB
scrambled_38.txt AC 265 ms 17112 KiB
scrambled_39.txt AC 429 ms 17196 KiB
scrambled_40.txt AC 272 ms 17184 KiB
scrambled_41.txt AC 407 ms 17180 KiB
scrambled_42.txt AC 332 ms 17112 KiB
subtask_00.txt AC 26 ms 924 KiB
subtask_01.txt AC 60 ms 796 KiB
subtask_02.txt AC 25 ms 800 KiB
subtask_03.txt AC 26 ms 732 KiB
subtask_04.txt AC 24 ms 796 KiB
subtask_05.txt AC 26 ms 764 KiB
subtask_06.txt AC 25 ms 808 KiB
subtask_07.txt AC 25 ms 736 KiB
subtask_08.txt AC 23 ms 924 KiB
subtask_09.txt AC 24 ms 928 KiB
subtask_10.txt AC 25 ms 800 KiB
subtask_11.txt AC 24 ms 736 KiB
subtask_12.txt AC 24 ms 796 KiB
subtask_13.txt AC 24 ms 920 KiB
subtask_14.txt AC 24 ms 920 KiB
subtask_15.txt AC 25 ms 920 KiB
subtask_16.txt AC 24 ms 800 KiB
subtask_17.txt AC 56 ms 792 KiB
subtask_18.txt AC 24 ms 924 KiB
subtask_19.txt AC 25 ms 928 KiB