atcoder057D(组合数模板)
题目链接: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(组合数模板)的更多相关文章
- HDU 6114 Chess【逆元+组合数】(组合数模板题)
<题目链接> 题目大意: 車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使 ...
- 组合数模板 - Lucas
2017-08-10 19:35:32 整理者:pprp 用于计算C(m,n) % p 代码如下: //lucas #include <iostream> using namespace ...
- 求大的组合数模板 利用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], ...
- 51nod 1805 小树 (组合数模板,逆元公式)
题意:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1805 题解: 根据cayley公式,无向图的每一个生成树就对应一个 ...
- 【组合数模板】HDU 6114 Chess
http://acm.hdu.edu.cn/showproblem.php?pid=6114 [思路] 就是求C(m,n) [板] #include<iostream> #include& ...
- HDU6333 莫队+组合数
题目大意: 给定n m 在n个数中最多选择m个的所有方案 #include <bits/stdc++.h> using namespace std; #define INF 0x3f3f3 ...
- 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 ...
- 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) 设 ...
- 数位dp 的简单入门
时间紧张,就不讲那么详细了. 之前一直被深搜代码误解,以为数位dp 其实就是记忆化深搜...(虽说爆搜确实很舒服而且还好想) 但是后来发现数位dp 的标准格式其实是 预处理 + dp ...... 数 ...
随机推荐
- SpringInAction4笔记——复习
由于目前只做后端的业务代码的开发,所以根据自己掌握的熟悉程度,只需要复习几个模块即可 重点看的是核心容器(IOC),redis,缓存,消息(主要是rabbitmq),事务,springboot,单元测 ...
- EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入
云平台架构 EasyDarwin开源流媒体云平台目前已经包括了EasyCMS中心管理服务.EasyDarwin流媒体服务.EasyCamera设备端(支持Arm_Linux.Android.PC).E ...
- Page (computer memory)
A page, memory page, or virtual page is a fixed-length contiguous block of virtual memory, described ...
- window.onerror 错误监听,发到后台
var doc = document.body || document.documentElement; var _onerror = Onerror(''); var Onerror = funct ...
- ABAP 将Range 条目数转化
RANGES:r_vbeln FOR lips-vbeln. r_vbeln-sign = 'I'. r_vbeln-option = 'EQ'. LOOP AT gt_item INTO gw_it ...
- Ubuntu 14.04中安装tftp
1. 安装sudo apt-get install tftp-hpa tftpd-hpa 2. 建立目录sudo mkdir /tftpboot sudo chmod 0777 /tftpbootsu ...
- for(String s:list)的运行
源码 List<String> list = new ArrayList<>(); for (String s:list){ } class文件 List<String& ...
- Block浅析一
1.在Block结构体中含有isa指针,这就证明了Block其实就是对象,并具有一般对象的所有功能. 2.Block是OC中的一种数据类型,在iOS开发中被广泛使用. 3.block的应用 (1)遍历 ...
- linux下环境搭建
1.jdk https://ivan-site.com/2012/05/download-oracle-java-jre-jdk-using-a-script/ 在linux用wget直接下载JDK ...
- ORA-03113: end-of-file on communication channel (通信通道的文件结尾)
今天有现场反应:数据库连不上了,提示什么归档日志有问题:又问了现场有做过什么特别操作,答曰没有,出问题后,只是重启了操作系统. 现场环境oracle11.0.2.3. 于是远程查看数据库状态,发现数据 ...