题目链接:http://abc057.contest.atcoder.jp/tasks/abc057_d

题意:给出n个数,可以选择x~y个数,使其平均值最大,求其最大平均数以及选择方案数。

思路:只考虑两种情况即可:

  1. 最大的数出现次数大于x, 那么最大平均数及为最大数,选择方案数为C(b[0], i)  x<=i<=min(y, b[0]); //其中b[0]为最大数出现的次数

  2. 最大数出现的次数小于x, 那么我们只需要考虑最末尾那个数即可;

代码:

 #include <iostream>
#include <algorithm>
#include <stdio.h>
#define ll long long
#define MAXN 60
using namespace std; ll a[MAXN], b[MAXN], c[MAXN][MAXN]; void gelou(void){//组合模板
c[][]=c[][]=;
for(int i = ; i<MAXN; i++){
c[i][]=;
for(int j = ; j<MAXN; j++){
c[i][j]=(c[i-][j]+c[i-][j-]);
}
}
} int main(void){
gelou();
ll n, x, y;
cin >> n >> x >> y;
for(int i=; i<n; i++){
cin >> a[i];
}
sort(a, a+n);
ll pos=, cc=a[n-];
for(int i=n-; i>=; i--){//记录每个数出现的次数
if(a[i]==cc){
b[pos]++;
}else{
cc=a[i];
pos++;
b[pos]++;
}
}
pos++;
ll gg=, num=;
if(b[]>=x){//最大的数出现的次数大于等于x
for(int i=x; i<=min(b[], y); i++){
num+=c[b[]][i];
}
printf("%.6lf\n", (double)a[n-]);
printf("%lld\n", num);
return ;
}
for(int i=; i<pos; i++){
if(gg+b[i]>=x){
ll f=x-gg;
num=c[b[i]][f];//只考虑最后一个值的选择情况
break;
}else{
gg+=b[i];
}
}
double ave=;
for(int i=n-,j=; j<x; j++,i--){
ave+=a[i];
}
ave/=x;
printf("%.6lf\n", ave);
printf("%lld\n", num);
return ;
}

atcoder057D(组合数模板)的更多相关文章

  1. HDU 6114 Chess【逆元+组合数】(组合数模板题)

    <题目链接> 题目大意: 車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使 ...

  2. 组合数模板 - Lucas

    2017-08-10 19:35:32 整理者:pprp 用于计算C(m,n) % p 代码如下: //lucas #include <iostream> using namespace ...

  3. 求大的组合数模板 利用Lucas定理

    Lucas定理:A.B是非负整数,p是质数.A B写成p进制:A=a[n]a[n-1]…a[0],B=b[n]b[n-1]…b[0]. 则组合数C(A,B)与C(a[n],b[n])C(a[n-1], ...

  4. 51nod 1805 小树 (组合数模板,逆元公式)

    题意:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1805 题解: 根据cayley公式,无向图的每一个生成树就对应一个 ...

  5. 【组合数模板】HDU 6114 Chess

    http://acm.hdu.edu.cn/showproblem.php?pid=6114 [思路] 就是求C(m,n) [板] #include<iostream> #include& ...

  6. HDU6333 莫队+组合数

    题目大意: 给定n m 在n个数中最多选择m个的所有方案 #include <bits/stdc++.h> using namespace std; #define INF 0x3f3f3 ...

  7. Andrew Stankevich's Contest (21) J dp+组合数

    坑爹的,,组合数模板,,, 6132 njczy2010 1412 Accepted 5572 MS 50620 KB C++ 1844 B 2014-10-02 21:41:15 J - 2-3 T ...

  8. hdu6333 Problem B. Harvest of Apples(组合数+莫队)

    hdu6333 Problem B. Harvest of Apples 题目传送门 题意: 求(0,n)~(m,n)组合数之和 题解: C(n,m)=C(n-1,m-1)+C(n-1,m)    设 ...

  9. 数位dp 的简单入门

    时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数 ...

随机推荐

  1. root无权限删除 原因 进程 占用 文件

    [root@test opt]# find / | grep gitlab | xargs rm -rfrm: cannot remove ‘/sys/fs/cgroup/devices/system ...

  2. 虚拟化(四):vsphere高可用功能前提-共享存储搭建(使用微软提供的iscsi software target,也可以使用免费开源的openfiler)

    虚拟化(一):虚拟化及vmware产品介绍 虚拟化(二):虚拟化及vmware workstation产品使用 虚拟化(三):vsphere套件的安装注意及使用 虚拟化(四):vsphere高可用功能 ...

  3. tornado之异步web服务一

    大部分Web应用(包括我们之前的例子)都是阻塞性质的,也就是说当一个请求被处理时,这个进程就会被挂起直至请求完成.在大多数情况下,Tornado处理的Web请求完成得足够快使得这个问题并不需要被关注. ...

  4. Go语言string,int,int64 ,float之间类型转换方法

    (1)int转string ? 1 2 s := strconv.Itoa(i) 等价于s := strconv.FormatInt(int64(i), 10) (2)int64转string ? 1 ...

  5. SDUT 2402 水杯最小表面积问题

    水杯 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 天气逐渐变热了,准备考研的高童鞋打算在夏天来临之前自己动手造一个水杯,以备口 ...

  6. maven项目所遇到的问题解决

    1.在Eclipse中创建Maven的Web项目时出现错误:An internal error occurred during: "Retrieving archetypes:". ...

  7. iPhone HTTP获得XML并使用GDataXML解析

    1. [代码][C/C++]代码     NSURL *url = [NSURL URLWithString:  @"http://www.raywenderlich.com/downloa ...

  8. 脚踏实地学C#3-装箱和拆箱

    装箱:一种接受值类型的值,根据这个值在堆中创建一个完整的引用类型对象并返回对象的引用(堆地址)的隐式转换 int i_number = 2; //在栈中声明int类型i_Number变量并初始化 ob ...

  9. cnn handwrite使用原生的TensorFlow进行预测

    100个汉字,放在data目录下.直接将下述文件和data存在同一个目录下运行即可. 关键参数: run_mode = "train" 训练模型用,修改为validation 表示 ...

  10. 【C/C++】获取当前系统时间

    #include<iostream> #include<Ctime> using namespace std; int main() { time_t t; time(& ...