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

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

“计算机坏了,可计算机系还得办。小 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. JavaScript(第十天)【Function类型】

    在ECMAScript中,Function(函数)类型实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象 ...

  2. 需求分析&原型设计

    需求分析&原型设计 需求分析 访问软件项目真实用户 首先本项目的用户是这个需要做简单四则运算的用户(我们团队通过对家里有三四年级小学生(需要做简单四则运算)的简单采访):反映了几个主要的问题: ...

  3. PM2使用心得

    PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 安装 npm install -g pm2 常用命令 $ npm i ...

  4. jQuery 写的textarea输入字数限制

    //先判断浏览器是不是万恶的IE        var bind_name = 'input';//默认事件        if (navigator.userAgent.indexOf(" ...

  5. api-gateway实践(01)服务网关 - 原型功能

    一.服务注册 1.增加组:LsqGrpA 2.增加版本:LsqVerA 3.增加api:LsqApiA 3.1.基本信息 3.2.前端定义 3.3.后端定义 二.服务上线和服务授权 1.服务上线 2. ...

  6. 新概念英语(1-39)Don't drop it!

    新概念英语(1-39)Don't drop it! Where does Sam put the vase in the end ? A:What are you going to do with t ...

  7. s遇到错误不要慌,教你方法走四方

    我觉得不管是新手还是老手,他们都会出错,有些错误控制台会报错,而有些错误控制台不会报错 面对不会报错的时候,就有一些人烦恼,不知道怎么办了,久而久之,就失去了对学习的乐趣. 所以我在这里说一下对错误处 ...

  8. RxJava系列2(基本概念及使用介绍)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  9. JavaScript 以及 css3进度条

    JavaScript css3进度条 使用css3实现进度条 <!DOCTYPE html> <html lang="en"> <head> & ...

  10. python/进程线程的总结

    python/进程线程的总结 一.进程和线程的描述: 进程:最小的资源管理单位 线程:最小的执行单位 执行一个进程时就默认执行一个线程(主线程) 进程和线程的工作方式: 串行: 假如共有A.B.C任务 ...