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

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

“计算机坏了,可计算机系还得办。小 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

最新文章

  1. java-内省与javabean
  2. C语言函数可变长度参数剖析
  3. NXP QN9020
  4. Qt源代码分析
  5. DOMContentLoaded事件
  6. 纪念一下自己的第一篇cnblog
  7. Linux驱动开发学习的一些必要步骤
  8. Linux socket编程 DNS查询IP地址
  9. 用Tomcat和Eclipse开发Servlet程序
  10. java web 简单的登录注册
  11. PHP代理访问网络资源
  12. Java main方法全解
  13. u3d不显示阴影的处理方法
  14. mybatis进阶--输入映射和输出映射
  15. Github提交Spark代码
  16. linux文件类型详解
  17. 个人tools封装
  18. 进入WinRe(windows恢复环境)
  19. 使用iframe标签隐藏CSRF代码
  20. iOS-UILabel加线

热门文章

  1. 记录python接口自动化测试--主函数(第六目)
  2. Alpha冲刺No.4
  3. Django 视图层
  4. Android webview Mixed Content无法显示图片解决
  5. typedef 使用
  6. [扩展推荐] —— Laravel Log 增强
  7. layui中进行form表单一些问题
  8. Eclipse在线更新慢
  9. ELK学习总结(4-1)elasticsearch更改mapping(不停服务重建索引)
  10. Spring Security 入门(1-7)Spring Security - Session管理