luogu#P8475. 「GLR-R3」雨水

「GLR-R3」雨水

题目背景

  「天将化雨舒清景,萌动生机待绿田」


  在天依面前口口声声说着习惯了,才开学没几天,文化课和乐队训练的压力可是又让阿绫头疼呢。

  浓缩为一个晚上的周末。站在阳台上,摸索朦胧于雨声的城市轮廓。雨水之日的雨,对于眼前的高楼大厦——们,恐怕也难有一些别样的意境吧。

  “雨水节令的雨、白露节令的露、霜降节令的霜、小雪节令的雪各十二钱……”

  胡乱想着,阿绫噗嗤一声笑了出来,“但是不管在哪里,雨中的空气,雨后的初阳,总是清新得叫人欢喜。”向着雨幕笑笑,拨弄这手里的旧吉他,不知不觉哼起那首歌来。


  雨水 「等凉雨 的温度 将不安燥热中和 寻觅着 风的波折」

题目描述

身后的门被敲响,接过天依包回来的一大盒多肉,放下东西贴贴一会儿之后,她们决定把多肉们在阳台上排成一排。

多肉们的高度不尽相同,天依先将一共 nn 盆多肉随意排成一排,从左到右第 ii 盆的高度为 aia_i。为了美观,她希望交换某些多肉的位置,使得由高度组成的序列 AA字典序尽可能小,不过,为了照顾多肉们的感受(?)她要求阿绫只能选取 AA 的一个长度为偶数的子序列(长度可以为 00),交换序列里第 11 盆和第 22 盆,第 33 盆和第 44 盆……的位置,然后放回它们原来的位置中。

苦活交给了阿绫,思考的工作自然交给你啦!请告诉阿绫,仅使用一次选取子序列的操作,她能够得到的字典序最小的新高度序列 AA'

形式化题意

给定一个长为 nn 的整数序列 AA,下标从 11 开始。你可以任取一个自然数 kk 以及一个序列 1,2,,n\lang 1,2,\dots,n\rang 的,长度为 2k (kN)2k~(k\in\mathbb N)子序列 PP,并对于所有 i=1,2,,ki=1,2,\dots,k,交换 AP2i1A_{P_{2i-1}}AP2iA_{P_{2i}} 的值。求在所有可能得到的新序列 AA' 中,字典序 最小的序列。

字典序:对于长度为 nn 的序列 AABB,定义 AA 的字典序小于 BB,当且仅当:

$$\exists i\in[1,n], (\forall j\in[1,i), A_j=B_j)\land A_i<B_i. $$

注意:本题输入输出方式具有特殊性。详见「输入格式」与「输出格式」。

输入格式

为节省程序输入耗时,序列 AA 将在你的程序内部由 xorShift128Plus 和提供的种子生成。下面给出 C++ 语言下的示例程序:

#include <cstdio> // scanf

const int MAXN = 712; // Set a right value according to your solution.
int n, a[MAXN + 1];

namespace Generator {

unsigned long long k1, k2;
int thres;

inline unsigned long long xorShift128Plus() {
    unsigned long long k3 = k1, k4 = k2;
    k1 = k4, k3 ^= (k3 << 23), k2 = k3 ^ k4 ^ (k3 >> 17) ^ (k4 >> 26);
    return k2 + k4;
}

inline void generate() {
    for (int i = 1; i <= n; ++i) {
        a[i] = xorShift128Plus() % thres;
    }
}

} // namespace Generator.

int main() {
    scanf("%d", &n);
    scanf("%llu %llu %d", &Generator::k1, &Generator::k2, &Generator::thres);
    Generator::generate();
    // Now array a[1..n] represents the sequence A in the statement.
    return 0;
}

输入文件仅有一行,包含四个整数 n,k1,k2,thresn,k_1,k_2,\textit{thres}

程序读入序列长度 nn,种子 k1,k2k_1,k_2 和序列值上限 thres\textit{thres},用 xorShift128Plus 连续生成 nn 个随机数,将它们对 thres\textit{thres} 取模的值依次赋给 a1,a2,,ana_1,a_2,\cdots,a_n,得到序列 AA。请使用其他语言的选手自行查阅相关信息实现生成器。

输出格式

为节省程序输出耗时,你的程序应当输出一行一个整数,表示 (i=1ni×Ai)mod264\left(\sum_{i=1}^ni\times A_i'\right)\bmod2^{64} 的值。

7 20120712 21702102 4
43
10 114514 19198 10
256

提示

样例 #1 解释

生成的序列为 A=1,1,3,0,0,1,3A=\lang 1,1,3,0,0,1,3\rang,选取 k=1,P=1,5k=1,P=\lang 1,5\rang, 得到答案序列为 A=0,1,3,0,1,1,3A'=\lang 0,1,3,0,1,1,3\rang,按照要求计算知答案为 4343

样例 #2 解释

生成的序列为 A=2,8,0,6,2,2,1,7,8,3A=\lang 2,8,0,6,2,2,1,7,8,3\rang,选取 k=3,P=1,3,4,7,8,10k=3,P=\lang 1,3,4,7,8,10\rang, 得到答案序列为 A=0,8,2,1,2,2,6,3,8,7A'=\lang 0,8,2,1,2,2,6,3,8,7\rang,按照要求计算知答案为 256256

数据规模与约定

本题采用 Subtask 的计分方式。

对于 100%100\% 的测试数据,1n1071\le n\le10^72thres1092\le \textit{thres}\le10^90k1,k2<2640\le k_1,k_2<2^{64}

对于不同的子任务,作如下约定:

子任务编号 nn thres\textit{thres} 特殊性质 分值
11 105\le10^5 109\le10^9 1010
22 20\le20 10\le10 1515
33 107\le10^7 =2=2 2020
44 107\le10^7 2525
55 109\le10^9 3030
  • 特殊性质:保证程序正确生成的序列 AA 中不存在相等元素。

  • 注意:本题时限为 0.5s0.5\text s

  • 热知识:《世末歌者》演唱于夏日,显然不在雨水节气。