题目大意
查看原帖
题目大意
1135241
Lyx8058楼主2024/7/30 20:36

题目描述

彭教授正在挑选晋级世界决赛的队伍。由于地区赛被取消,他使用随机洗牌对球队进行排名。总共有nn支队伍。他的代码如下:

uint64_t x;//uint64_t表示64位无符号整数
int n;
uint64_t rand() {//这是一个异或移位随机生成器
    x ^= x << 13;
    x ^= x >> 7;
    x ^= x << 17;
    return x;
}
int main() {
    cin >> n;
    cin >> x;
    for (int i = 1; i <= n; i++) {//随机洗牌[1,2,…,n]
        a[i] = i;
        swap(a[i], a[rand() % i + 1]);
    }
    for (int i = 1; i <= n; i++) {//打印结果
        cout << a[i] << (i == n ? '\n' : ' ');
    }
}

他编译并运行代码,然后输入nn和一些特殊的非负整数xx。他将结果打印在纸上。

一天后,彭教授忘记了他对xx的选择。你会得到代码的结果和整数nn。请恢复彭教授输入的数字xx。

输入格式

第一行包含一个整数 n$$(50\le n\le 100000)代表球队数量。

下一行包含nn个整数,这是庞教授代码打印的结果。保证结果是正确的,即存在一个整数x$$(0\le x\le 2^{64}−1)导致结果。

输出格式

请注意,示例输入的第二行被包裹以适应页面的宽度。

2024/7/30 20:36
加载中...