题目链接: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, 那么我们只需要考虑最末尾那个数即可;

代码:

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <stdio.h>
  4. #define ll long long
  5. #define MAXN 60
  6. using namespace std;
  7.  
  8. ll a[MAXN], b[MAXN], c[MAXN][MAXN];
  9.  
  10. void gelou(void){//组合模板
  11. c[][]=c[][]=;
  12. for(int i = ; i<MAXN; i++){
  13. c[i][]=;
  14. for(int j = ; j<MAXN; j++){
  15. c[i][j]=(c[i-][j]+c[i-][j-]);
  16. }
  17. }
  18. }
  19.  
  20. int main(void){
  21. gelou();
  22. ll n, x, y;
  23. cin >> n >> x >> y;
  24. for(int i=; i<n; i++){
  25. cin >> a[i];
  26. }
  27. sort(a, a+n);
  28. ll pos=, cc=a[n-];
  29. for(int i=n-; i>=; i--){//记录每个数出现的次数
  30. if(a[i]==cc){
  31. b[pos]++;
  32. }else{
  33. cc=a[i];
  34. pos++;
  35. b[pos]++;
  36. }
  37. }
  38. pos++;
  39. ll gg=, num=;
  40. if(b[]>=x){//最大的数出现的次数大于等于x
  41. for(int i=x; i<=min(b[], y); i++){
  42. num+=c[b[]][i];
  43. }
  44. printf("%.6lf\n", (double)a[n-]);
  45. printf("%lld\n", num);
  46. return ;
  47. }
  48. for(int i=; i<pos; i++){
  49. if(gg+b[i]>=x){
  50. ll f=x-gg;
  51. num=c[b[i]][f];//只考虑最后一个值的选择情况
  52. break;
  53. }else{
  54. gg+=b[i];
  55. }
  56. }
  57. double ave=;
  58. for(int i=n-,j=; j<x; j++,i--){
  59. ave+=a[i];
  60. }
  61. ave/=x;
  62. printf("%.6lf\n", ave);
  63. printf("%lld\n", num);
  64. return ;
  65. }

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. scrollify 全屏滚动插件

    使用 1.引入文件 <script src="js/jquery.min.js"> </script> <script src="js/jq ...

  2. c# winform 根据窗体自动调整控件

    一.概述 本文要实现的功能是:当窗体最大化时,控件的大小可以随窗体一起变化.开发环境,vs2010 c# winform,窗体名称采用默认的Form1. 2.把调整控件大小的方法放到一个类中:Form ...

  3. DuiLib笔记之Control常用属性

    name 指定控件名称,同一窗口内必须唯一,类型:STRING float 用于指定控件是否使用绝对定位,或设置FloatPercent,类型:BOOL,默认值为false,格式:float=&quo ...

  4. MFC HTTP(S)请求笔记

    GET示例 #include <afxinet.h> #include <iostream> #include <vector> #ifdef _UNICODE # ...

  5. 阿里Java开发手册学习 2 异常日志

    异常日志 异常处理 1.不要捕获继承自RuntimeException的运行时异常类,这类异常通常由程序员来校验,来保证查询的健壮性. 2. 不要对大段代码 try catch,分清稳定代码和非稳定代 ...

  6. 配置tomcat,访问端口改为80

    首先:找到tomcat的的config文件夹下的server.xml文件: 编辑server.xml 保存server.xml文件,重启tomcat服务器,即可. 亲测好使.

  7. UIVisualEffectView

    UIBlurEffect 只支持到iOS 8.0+.系统给予的一个自动生成滤镜的方法 UIVisualEffectView *effectView = [[UIVisualEffectView all ...

  8. Protocol_BGP

    BGP协议 作者:Danbo 2015-7-8 BPG最重要的就是属性,下面我们针对路径属性分析一下.

  9. vue2.x源码理解

    也不知道哪股风潮,钻研源码竟成了深入理解的标配.我只想说一句,说的很对 准备工作 从GitHub上面下载vue的源码(https://github.com/vuejs/vue) 了解下Flow,Flo ...

  10. (转)vim 访问系统剪贴板

    原文出处:http://vim.wikia.com/wiki/Accessing_the_system_clipboard Please review this tip: This tip was i ...