我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页
往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章
此系列更新频繁,求各位读者点赞
关注我可以了解更多内容哦
偷偷告诉你,我正在冲
1100
粉
{\color{Gray} {\small 偷偷告诉你,我正在冲1100粉} }
偷偷告诉你,我正在冲1100粉
你们有什么想了解的可以发在评论区,我会仔细的看
{\color{Gray} {\small 你们有什么想了解的可以发在评论区,我会仔细的看} }
你们有什么想了解的可以发在评论区,我会仔细的看
1100
粉时我会抓几个做文章
{\color{Gray} {\small1100粉时我会抓几个做文章} }
1100粉时我会抓几个做文章
今天我们学什么
今天我们不学什么,就是做一道桶排的题目
拆分
题目描述
集合的 m e x mex mex 是指一个集合中没有出现过的最小自然数。例如 m e x ( { 1 , 2 } ) = 0 , m e x ( { 0 , 1 , 2 , 3 } ) = 4 mex(\{1,2\})=0,mex(\{0,1,2,3\})=4 mex({1,2})=0,mex({0,1,2,3})=4。
现在你有 n n n 个数 a 1 , . . . , a n a_1,...,a_n a1,...,an,你可以将它们划分为任意多个新集合,使得所有新集合的 m e x mex mex 之和最大,求这个最大值是多少。
输入格式
第一行输入一个正整数 n n n。
接下来一行包含 n n n 个非负整数,即 a 1 , . . . , a n a_1,...,a_n a1,...,an。
输出格式
输出一行一个整数表示答案。
样例 #1
样例输入 #1
5
0 0 1 1 2
样例输出 #1
5
样例 #2
样例输入 #2
5
1 2 3 4 5
样例输出 #2
0
提示
样例1说明
分成两个集合 { 0 , 1 } , { 0 , 1 , 2 } \{0,1\},\{0,1,2\} {0,1},{0,1,2}。
数据范围
对于所有测试点, 1 ≤ n ≤ 1 0 5 , 0 ≤ a i ≤ 1000 1\le n\le 10^5, 0\le a_i\le 1000 1≤n≤105,0≤ai≤1000。
测试点编号 | a i a_i ai 的范围 |
---|---|
1 | a i > 0 a_i>0 ai>0 |
2 | a i = 0 a_i=0 ai=0 |
3-4 | 0 ≤ a i ≤ 1 0\le a_i\le 1 0≤ai≤1 |
5-10 | 0 ≤ a i ≤ 1000 0\le a_i\le 1000 0≤ai≤1000 |
题解
思路
简单的桶排题目
代码
#include<iostream>
#define f(n,i) for(i=1;i<=n;i++)
#define p std::
#define N 20000
int n,b[N+5],t,a,i,j;
int main(){
p cin>>n;
f(n,i)p cin>>t,b[t]++;
f(b[0],i)
f(N,j){
if(!b[j]){
a+=j;
break;
}b[j]--;
}
p cout<<a;
}
总结
做题时要仔细分析