3968: 一道非常简单的排序题(挖土机周赛 Round 31(语法场))

内存限制:512 MB 时间限制:3.000 S
评测方式:文本比较 命题人:
提交:5 解决:3

题目描述

33DAI 定义了一个函数:

int seed, P; // 通过输入得到 int f(int id) { return 1LL * id * id % P * seed % P; } 

33DAI 用这个函数生成了一个长度为  序列 ,下标从 1,第  个数  的值为 ()

请你将这个序列排序,保证每个数都大于或等于它后面的数,即 12

然后输出“每个元素与其下标之和”的异或和。即排序后的 (1+1)(2+2)(+) 。

异或:数学中用  符号表示异或和,C++ 中可以使用 a^b 算出两个数的异或和。由于异或和运算属于位运算,优先级非常低,建议所有涉及位运算的表达式都多用小括号来保证运算符优先级正确。

输入

输入三个整数 ,,

输出

输出题目要求的“每个元素与其下标之和”的异或和。

样例输入 复制

5 33 100

样例输出 复制

92

提示

样例解释

得到的序列为 {33,32,97,28,25},排序后为 {97,33,32,28,25}

(97+1)(33+2)(32+3)(28+4)(25+5)=92

5000000 33 998244353

1069767311

数据规模与约定

对于 100% 的数据,15×1061,109

  • 子任务 1(30 分):保证 =1
  • 子任务 2(30 分):保证 1000
  • 子任务 3(40 分):没有特殊限制


来源/分类