题目背景
忍,爱丽丝,绫和阳子一众千辛万苦地总算出好了第一试,按原先计划,可怜会出第二试。
“不好了,可怜给我发信息说她降落后被拉去隔离 30 天了,没有电脑,出不了题”,绫突然收到了不幸的消息。
“那咋办?没 idea 了,编不出来了啊!” 众人慌作一团。
看了看日期,离 ZJOI 还有一周。
欲知后事如何,请看下回分解。
题目描述
九条可怜是一个喜欢吃拉面的女孩子。
有一天她去吃拉面,她发现拉面师傅为她拉的是一个长度为
如下过程称为一次 “拉面”:
- 将面条对折,面条的长度会变成
,第 个位置的调料数量会变为原来第 个位置的调料与第 个位置的调料数量之和,如果新面条第 个位置的调料数量为 ,那么满足 。 - 将面条拉回原来的长度
,每个位置会变为两个位置,并且调料数量会均分,如果现在的第 个位置的调料数量是 ,那么 。
现在对于一个固定的
输入格式
第一行输入三个正整数
接下来输入
第一行输入四个正整数
第二行输入
为了避免大量的输入与输出,noodle_template.cpp
供选手使用,见本段末尾,同时在这里我们做一定量的说明:
首先我们从数据中依次读入两个
在每次循环中,我们对一组数据进行计算。首先依次读入三个
接下来是生成 rd()
函数,将
#include <bits/stdc++.h>
using namespace std;
unsigned long long rd (unsigned long long &x) {
x ^= (x << 13);
x ^= (x >> 7);
x ^= (x << 17);
return x;
}
int main () {
int test, T;
unsigned long long seed;
scanf("%d%d%llu", &test, &T, &seed);
for (int Case = 1; Case <= T; Case ++) {
int n, q, x;
long long k_max;
scanf("%d%d%d%lld", &n, &q, &x, &k_max);
vector<int> a(n + 1);
for (int i = 1; i <= n; i ++) {
scanf("%d", &a[i]);
}
for (int i = 1; i <= q; i ++) {
long long k = rd(seed) % k_max;
/∗
Code your solution here.
∗/
}
}
}
输出格式
输出
样例一
input
0 2 13 4 2 1 3 1 4 2 3 6 2 3 3 6 2 5 3 1 4
output
5 499122191
explanation
第一组测试数据中,
操作一次后为
操作两次后为
其中生成询问为:
询问位置:
第一个询问:
第二个询问:
答案为
第二组测试数据中,
操作一次后为
操作两次后为
其中生成询问为:
询问位置:
第一个询问
第二个询问
答案为
样例二
见附件下载。
限制与约定
对于所有测试点:保证
注意,对于样例,测试点编号
每个测试点的具体限制见下表:
测试点编号 | 特殊限制 | |||
---|---|---|---|---|
无 | ||||
无 | ||||
无 | ||||
无 | ||||
无 | ||||
无 | ||||
无 | ||||
无 | ||||
无 | ||||
无 |
时间限制:
空间限制: