又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的)。

不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了。

“计算机坏了,可计算机系还得办。小 K,你去了解一下大家的成绩,顺便数数今年两校计算机系有多少人吧!”

于是,小 K 来到了人群中,开始调查大家的成绩。

然而,同学们只有七秒钟的记忆,已经忘记了自己的具体成绩(这可真是尴尬啊)。

但是,因为在忘记成绩之前和校友互相调侃过,他们清楚地记得 在自己的学校里,有多少人(不包括自己)拥有和自己相同的成绩。

但是,清北的学生实在是太多了,小 K 询问了 NNN 个人之后,就已经精疲力尽了。

“怎么办呢?唉,小 Y,你来帮我算一下 两校一共 最少有多少学生吧,我就把这个数字报上去。”

“额 (⊙﹏⊙)”

你没猜错,你就是可怜的小 Y。现在请你来解决这个问题吧!

输入格式

第一行两个数字 N,MN,MN,M,其中 NNN 表示小 K 一共询问了 NNN 名学生,MMM 的意义见下文。

第二行有 N100\frac{N}{100}​100​​N​​ 个数字,用来生成每名被询问同学的反馈情况(这些数字用作数据生成器的种子,数据的具体生成方法见下文)。

输出格式

输出只有一行,包含一个数字,表示两校一共的最少人数。

数据范围

关于数据生成器的说明

因为 NNN 可能比较大,为了避免读入花费过多时间,我们采用数据生成器的方式给出每名被询问学生的反馈结果(即在他的学校中,有多少人和他成绩相同)。

输入中的每个种子 seedseedseed,用来生成 100100100 个数字,设第 iii 个数字为 AiA_iA​i​​,则

A1=seed\displaystyle A_1=seedA​1​​=seed

Ai=(Ai−1×109+107)modM\displaystyle A_i=(A_{i-1}\times 109+107)\mod MA​i​​=(A​i−1​​×109+107)modM

生成的这 100100100 个数字就是被询问的 100100100 名学生的反馈结果。

当然,我们保证 NNN 是 100100100 的倍数。

关于细节问题的说明

为了防止选手不能正确理解题意,在此对具体题意以及一些上文中未提到的细节之处做一些说明。

为什么答案不是 NNN 呢?你不是说了有 NNN 名学生了吗?”。事实上,NNN 只是小 KKK 询问到的学生数目,并不是两校真正的学生数目!真正的学生数目是未知的。

那第 iii 名学生到底是清华的还是北大的啊?回答是 “小 K 不知道啊,这是你要合理安排的事情啊!”。让答案最小就是你的目标,为此你要考虑是把他安排在清华好,还是安排在北大好。

MMM 是否是质数?既然题目没说,那就不一定是质数,请选手考虑周全。

seedseedseed 是否小于 MMM?我们保证每个测试点的 seedseedseed 都是小于该测试点的 MMM 的。

关于测试数据。我们的数据是基本随机的,请放心选择随机化算法,并分析其时间复杂度及空间复杂度。

最后,为什么没有 样例数据 呢?(计蒜客老师加了一组样例)。 真不是出题人不想给你们,最小的数据也要有 100100100 名学生,这根本没法写样例解释嘛! 所以,我们在下面给出一组解密后的样例,并做出解析。请注意 该样例不符合格式

小 K 一共采访到了 555 名同学,他们的反馈结果分别是 1,1,2,2,31,1,2,2,31,1,2,2,3。 那么,最优解应当为 999,我们在下面给出一个表格,表示最优解的详细情况。

祝大家顺利通过此题,在比赛中取得好成绩,进入理想的学府!

忽略每行输出的末尾多余空格

样例输入

100 100
1

样例输出

179
首先,不难发现把所有学生都安排到一所学校里就可以得到最优答案。
本题的关键其实就是把一些反馈数字相同的人组合在一起。比如两个人的反馈数字都是 1 ,那
么你可以安排这两人的分数相同
严谨一点的叙述就是,如果有 v 个人的反馈数字都是 k ,那么这些人对答案的实际贡献是大
于等于 v 的最小 k+1 的倍数,可以写为

$$ans+={\lceil {v \over {k+1}}\rceil} *(k+1)$$
统计每种数字的出现次数用hash
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long lol;
const int N=1e7+;
const int M=1e9+;
lol n,m,seed,a,h[N],v[N],ans;
void push_hash(lol x)
{
lol pos=x%N;
while (h[pos]!=x&&h[pos]!=)
{
pos++;
if (pos>=N) pos=;
}
if (h[pos]==)
{v[pos]=;h[pos]=x;}
else {v[pos]++;}
}
int main()
{int i,j;
cin>>n>>m;
for (i=;i<=n/;i++)
{
scanf("%lld",&seed);
a=seed;
for (j=;j<=;j++)
{
push_hash(a+);
a=(a*+)%m;
}
}
for (i=;i<N;i++)
if (h[i])
{
ans+=((v[i]+h[i]-)/h[i])*h[i];
}
cout<<ans;
}

又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的)。

不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了。

“计算机坏了,可计算机系还得办。小 K,你去了解一下大家的成绩,顺便数数今年两校计算机系有多少人吧!”

于是,小 K 来到了人群中,开始调查大家的成绩。

然而,同学们只有七秒钟的记忆,已经忘记了自己的具体成绩(这可真是尴尬啊)。

但是,因为在忘记成绩之前和校友互相调侃过,他们清楚地记得 在自己的学校里,有多少人(不包括自己)拥有和自己相同的成绩。

但是,清北的学生实在是太多了,小 K 询问了 NNN 个人之后,就已经精疲力尽了。

“怎么办呢?唉,小 Y,你来帮我算一下 两校一共 最少有多少学生吧,我就把这个数字报上去。”

“额 (⊙﹏⊙)”

你没猜错,你就是可怜的小 Y。现在请你来解决这个问题吧!

输入格式

第一行两个数字 N,MN,MN,M,其中 NNN 表示小 K 一共询问了 NNN 名学生,MMM 的意义见下文。

第二行有 N100\frac{N}{100}​100​​N​​ 个数字,用来生成每名被询问同学的反馈情况(这些数字用作数据生成器的种子,数据的具体生成方法见下文)。

输出格式

输出只有一行,包含一个数字,表示两校一共的最少人数。

数据范围

关于数据生成器的说明

因为 NNN 可能比较大,为了避免读入花费过多时间,我们采用数据生成器的方式给出每名被询问学生的反馈结果(即在他的学校中,有多少人和他成绩相同)。

输入中的每个种子 seedseedseed,用来生成 100100100 个数字,设第 iii 个数字为 AiA_iA​i​​,则

A1=seed\displaystyle A_1=seedA​1​​=seed

Ai=(Ai−1×109+107)modM\displaystyle A_i=(A_{i-1}\times 109+107)\mod MA​i​​=(A​i−1​​×109+107)modM

生成的这 100100100 个数字就是被询问的 100100100 名学生的反馈结果。

当然,我们保证 NNN 是 100100100 的倍数。

关于细节问题的说明

为了防止选手不能正确理解题意,在此对具体题意以及一些上文中未提到的细节之处做一些说明。

为什么答案不是 NNN 呢?你不是说了有 NNN 名学生了吗?”。事实上,NNN 只是小 KKK 询问到的学生数目,并不是两校真正的学生数目!真正的学生数目是未知的。

那第 iii 名学生到底是清华的还是北大的啊?回答是 “小 K 不知道啊,这是你要合理安排的事情啊!”。让答案最小就是你的目标,为此你要考虑是把他安排在清华好,还是安排在北大好。

MMM 是否是质数?既然题目没说,那就不一定是质数,请选手考虑周全。

seedseedseed 是否小于 MMM?我们保证每个测试点的 seedseedseed 都是小于该测试点的 MMM 的。

关于测试数据。我们的数据是基本随机的,请放心选择随机化算法,并分析其时间复杂度及空间复杂度。

最后,为什么没有 样例数据 呢?(计蒜客老师加了一组样例)。 真不是出题人不想给你们,最小的数据也要有 100100100 名学生,这根本没法写样例解释嘛! 所以,我们在下面给出一组解密后的样例,并做出解析。请注意 该样例不符合格式

小 K 一共采访到了 555 名同学,他们的反馈结果分别是 1,1,2,2,31,1,2,2,31,1,2,2,3。 那么,最优解应当为 999,我们在下面给出一个表格,表示最优解的详细情况。

祝大家顺利通过此题,在比赛中取得好成绩,进入理想的学府!

忽略每行输出的末尾多余空格

样例输入

100 100
1

样例输出

179

计蒜客模拟赛5 D2T1 成绩统计的更多相关文章

  1. 计蒜客模拟赛D2T1 蒜头君的兔子:矩阵快速幂

    题目链接:https://nanti.jisuanke.com/t/16442 题意: 有个人在第一年送了你一对1岁的兔子.这种兔子刚生下来的时候算0岁,当它在2~10岁的时候,每年都会生下一对兔子, ...

  2. 计蒜客模拟赛D2T3 蒜头君救人:用bfs转移状压dp

    题目链接:https://nanti.jisuanke.com/t/16444 题意: 蒜头君是一个乐于助人的好孩子,这天他所在的乡村发生了洪水,有多名村民被困于孤岛上,于是蒜头君决定去背他们离开困境 ...

  3. 计蒜客模拟赛D1T3 蒜头君的坐骑:用dfs转移dp

    题目链接:https://nanti.jisuanke.com/t/16447 题意: 蒜头君有一只坐骑,人马. 一天,蒜头君骑着他的坐骑走上了一片n*m的大荒野,一开始时,蒜头君在(1,1)点,他要 ...

  4. 计蒜客模拟赛D2T2 蒜头君的排序:区间逆序对(移动端点) + 树状数组

    题目链接:https://nanti.jisuanke.com/t/16443 题意: 给你一个由1~n构成的正整数序列,有m组询问,每组询问要求输出[l , r]区间内的逆序对个数. 数据范围: 对 ...

  5. 计蒜客模拟赛D1T2 蒜头君的树:树上节点之间最短距离和

    题目链接:https://nanti.jisuanke.com/t/16446 题意: 给你一棵有n个节点的树以及每条边的长度,输出树上节点之间的最短距离和.然后进行m次操作,每次操作更改一条边的长度 ...

  6. 计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和

    题目链接:https://nanti.jisuanke.com/t/16445 题意: 给你一个n*n大小的01矩阵,和一个k*k大小的锤子,锤子只能斜着砸,问只砸一次最多能砸到多少个1. 题解: 将 ...

  7. 计蒜客模拟赛5 D2T2 蚂蚁搬家

    很久很久以前,有很多蚂蚁部落共同生活在一片祥和的村庄里.但在某一天,村庄里突然出现了一只食蚁兽,蚂蚁们为了保全性命而决定搬家. 然而这个村庄四面环山,想要离开这个村庄必须要从地洞里离开,村子里一共有 ...

  8. 计蒜客模拟赛 #5 (B 题) 动态点分治+线段树

    虽然是裸的换根dp,但是为了在联赛前锻炼码力,强行上了点分树+线段树. 写完+调完总共花了不到 $50$ 分钟,感觉还行. code: #include <bits/stdc++.h> # ...

  9. 2019ICPC西安邀请赛(计蒜客复现赛)总结

    开始时因为吃饭晚了一刻钟,然后打开比赛.看了眼榜单A题已经过了二十来个队伍了,宝儿就去做A. 传师说最后一题看题目像最短路,于是我就去看M了,宝儿做完之后也来陪我看.M一开始看到时以为是像   POJ ...

随机推荐

  1. 实验MyOD

    实验MyOD 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和运行结果截图,加上学号水印,提交码云代码链接. 代码如下: (刚开始 ...

  2. Alpha冲刺博客合集

    Alpha冲刺序列: Alpha冲刺Day1:Alpha No.1 Alpha冲刺Day2:Alpha No.2 Alpha冲刺Day3:Alpha No.3 Alpha冲刺Day4:Alpha No ...

  3. 项目Beta预备

    项目名称:城市安全风险管控系统 Beta预备: 讨论组长是否重选的议题和结论 项目组长可以说是一个团队的灵魂和核心.一个好的领导者可以激发团队成员的工作热情,提高开发效率,保质保量的完成工作.虽然在A ...

  4. Python 单向循环链表

    操作 is_empty() 判断链表是否为空 length() 返回链表的长度 travel() 遍历 add(item) 在头部添加一个节点 append(item) 在尾部添加一个节点 inser ...

  5. Project facet is Java version 1.7 is not spported

    在移植eclipse项目时,如果遇到 "Project facet Java version 1.7 is not supported." 项目中的jdk1.7不支持.说明项目是其 ...

  6. 02-移动端开发教程-CSS3新特性(中)

    1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸.背景裁切区域.背景定位参照点.多重背景等. 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比 ...

  7. excel2003和excel2007文件的创建和读取

    excel2003和excel2007文件的创建和读取在项目中用的很多,首先我们要了解excel的常用组件和基本操作步骤. 常用组件如下所示: HSSFWorkbook excel的文档对象 HSSF ...

  8. Win7添加php环境变量.

    1) "我的电脑"右键"属性"->高级系统设置->环境变量->系统变量->Path->编辑 2) 将PHP的执行路径的目录&quo ...

  9. Python内置函数(61)——eval

    英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals an ...

  10. Python内置函数(44)——len

    英文文档: len(s) Return the length (the number of items) of an object. The argument may be a sequence (s ...