QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#667409#56. Nim Productxx_mmc75 4ms3944kbC++141.2kb2024-10-22 22:48:522024-10-22 22:48:53

Judging History

你现在查看的是最新测评结果

  • [2024-10-22 22:48:53]
  • 评测
  • 测评结果:75
  • 用时:4ms
  • 内存:3944kb
  • [2024-10-22 22:48:52]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
#define endl '\n'
#define uint unsigned int
#define N 256

unsigned int SA, SB, SC;
unsigned int rng()
{
    SA ^= SA << 16;
    SA ^= SA >> 5;
    SA ^= SA << 1;
    unsigned int t = SA;
    SA = SB;
    SB = SC;
    SC ^= t ^ SA;
    return SC;
}

uint rem[N][N];
// bool vis[N][N];
void init() {
    // memset(vis, 0, sizeof vis);
    memset(rem, -1, sizeof rem);
}
uint nimP(uint x, uint y, int k = 16) {
    if (x <= 1 || y <= 1) return x * y;
    if (k < 8 && rem[x][y] != -1) return rem[x][y];
    uint a = x >> k, b = y >> k, c = x & ((1ull << k) - 1), d = y & ((1ull << k) - 1);
    uint ab = nimP(1ull << k >> 1, nimP(a, b, k >> 1), k >> 1);
    uint cd = nimP(c, d, k >> 1);
    uint res = ((nimP(a ^ c, b ^ d, k >> 1) ^ cd) << k) ^ ab ^ cd;
    if (k < 8) rem[x][y] = res;
    return res;
}




void solve()
{
    int T;
    cin >> T >> SA >> SB >> SC;
    uint lastans = 0;
    init();
    while (T--)
    {
        uint x = rng() + lastans;
        uint y = rng();
        lastans = nimP(x, y);
    }
    cout << lastans << endl;
}

int32_t main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

詳細信息


Pretests


Final Tests

Test #1:

score: 25
Accepted
time: 1ms
memory: 3808kb

input:

10 274134852 279286565 744539633

output:

2002382043

result:

ok single line: '2002382043'

Test #2:

score: 25
Accepted
time: 1ms
memory: 3828kb

input:

1000 734766235 309378503 610268282

output:

2106551671

result:

ok single line: '2106551671'

Test #3:

score: 25
Accepted
time: 4ms
memory: 3944kb

input:

30000 784936363 827067061 800454511

output:

554318281

result:

ok single line: '554318281'

Test #4:

score: 0
Time Limit Exceeded

input:

30000000 72129929 485897764 129463885

output:


result: