5090: [Lydsy1711月赛]组题

Time Limit: 1 Sec  Memory Limit: 256 MB
Submit: 785  Solved: 186
[Submit][Status][Discuss]

Description

著名出题人小Q的备忘录上共有n道可以出的题目,按照顺序依次编号为1到n,其中第i道题目的难度系数被小Q估计
为a_i,难度系数越高,题目越难,负数表示这道题目非常简单。小Q现在要出一套难题,他决定从备忘录中选取编
号连续的若干道题目,使得平均难度系数最高。当然,小Q不能做得太过分,一套题目必须至少包含k道题目,因此
他不能通过直接选取难度系数最高的那道题目来组成一套题。请写一个程序,帮助小Q挑选平均难度系数最高的题
目。

Input

第一行包含两个整数n,k(1<=n<=100000,1<=k<=n),分别表示题目的总量和题数的下界。
第二行包含n个整数a_1,a_2,...,a_n(|a_i|<=10^8),分别表示每道题目的难度系数。

Output

输出一个既约分数p/q或-p/q,即平均难度系数的最大值。

Sample Input

5 3
1 4 -2 -3 6

Sample Output

5/4

HINT

Source

思路:01分数规划,二分平均值,然后就是求最大的连续的长度不小于K的值,然后由于是需要输出分子分母形式,我们在二分的同时记录“和”与“长度”,最后约分输出即可。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=;
int a[maxn],N,K; double b[maxn]; ll A,B,sum[maxn];
bool check(double Mid)
{
rep(i,,N) b[i]=b[i-]+a[i]-Mid; int pos=;
rep(i,K,N) {
if(b[i]-b[pos]>=){
A=sum[i]-sum[pos];
B=i-pos; return true;
}
if(b[i-K+]<b[pos]) pos=i-K+;
}return false;
}
int main()
{
scanf("%d%d",&N,&K);
double L=-,R=,Mid; int num=;
rep(i,,N) scanf("%d",&a[i]),;
rep(i,,N) sum[i]=sum[i-]+a[i];
while(num--){
Mid=(L+R)/;
if(check(Mid)) L=Mid;
else R=Mid;
}
if(A<) putchar('-'),A=abs(A);
ll g=__gcd(A,B);
printf("%lld/%lld\n",A/g,B/g);
return ;
}

但是不知道为什么我自己的check函数是WA的,难道是delta一直做加减法引起的精度问题?

bool check(double Mid)
{
rep(i,,N) b[i]=(double)a[i]-Mid; int head=; double delta=;
rep(i,,N) {
delta+=b[i];
while(i-head+>K&&b[head]<) delta-=b[head++];
if(i-head+>=K&&delta>=){
A=sum[i]-sum[head-]; B=i-head+;
return true;
}
}return false;
}

BZOJ5090: [Lydsy1711月赛]组题(01分数规划)的更多相关文章

  1. bzoj5090 [Lydsy1711月赛]组题 分数规划

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5090 题解 令 \(s_i\) 表示 \(a_i\) 的前缀和. 那么平均难度系数就是 \[ ...

  2. bzoj5090[lydsy11月赛]组题

    裸的01分数规划,二分答案,没了. #include<cstdio> #include<algorithm> using namespace std; const int ma ...

  3. 【Earthquake, 2001 Open 】 0-1 分数规划

    71  奶牛施工队一场地震把约翰家园摧毁了,坚强的约翰决心重建家园.约翰已经修复了 N 个牧场,他需要再修复一些道路把它们连接起来.碰巧的是,奶牛们最近也成立了一个工程队,专门从事道路修复.而然,奶牛 ...

  4. 【poj 2976】Dropping tests(算法效率--01分数规划 模版题+二分){附【转】01分数规划问题}

    P.S.又是一个抽时间学了2个小时的新东西......讲解在上半部分,题解在下半部分. 先说一下转的原文:http://www.cnblogs.com/perseawe/archive/2012/05 ...

  5. 【转】[Algorithm]01分数规划

    因为搜索关于CFRound277.5E题的题解时发现了这篇文章,很多地方都有值得借鉴的东西,因此转了过来 原文:http://www.cnblogs.com/perseawe/archive/2012 ...

  6. Dropping tests [POJ2976] [01分数规划]

    Description 今年有 n 场 ACM-ICPC 竞赛,小明每场都有资格参加.第 i 场竞赛共有 b[i] 道题.小明预测第 i场他能做出 a[i] 道题.为了让自己看着更“大佬”一些,小明想 ...

  7. [转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环

    01分数规划 前置技能 二分思想最短路算法一些数学脑细胞? 问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此 ...

  8. 2018年东北农业大学春季校赛 I wyh的物品【01分数规划/二分】

    链接:https://www.nowcoder.com/acm/contest/93/I来源:牛客网 题目描述 wyh学长现在手里有n个物品,这n个物品的重量和价值都告诉你,然后现在让你从中选取k个, ...

  9. POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))

    题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ...

随机推荐

  1. 【运维技术】VM虚拟机上使用centos7安装docker启动gogs服务教程【含B站视频教程】

    VM虚拟机上使用centos7安装docker启动gogs服务视频教程 BiliBili视频教程链接飞机票,点我 使用VMware Workstation安装Centos7 MinMal系统 第一步: ...

  2. 设置WebApi里面命名空间参数

    在这种情况下: 如果没有特别处理,会报: 所以要像MVC中的控制器一下配置一个命名空间参数,webapi里面没有自带这个功能 代码: using System; using System.Collec ...

  3. SQL 中 not in 查询不到数据问题

    在开发的过程中,遇到过not in 始终查询不到数据问题 select * from T_CustomerInfo where CustomerID not in (select CustomerID ...

  4. HDU 3709 Balanced Number(数位DP)题解

    思路: 之前想直接开左右两边的数结果爆内存... 枚举每次pivot的位置,然后数位DP,如果sum<0返回0,因为已经小于零说明已经到了pivot右边,继续dfs只会越来越小,且dp数组会炸 ...

  5. pyenv 让 python 版本完美切换

    前言 我觉得如果使用 python 开发的话,还是在 unix/linux 的环境下吧,shell 工具的效率比 windows 高得多,尽管 windows 下也有 cmder 这种神器,而且现在 ...

  6. spring Boot加载bean

    1.SpringBoot中加载bean,可以使用注解@compenent直接加载到applicationContext容器中 2.在直接类@Configuration中,手动注册bean,如:

  7. [JS] - level8 kata

    https://www.codewars.com/kata/57e3f79c9cb119374600046b function hello(name) { if(name == "" ...

  8. SQL优化:清理生产环境中已失效字段基本步骤

    1.统计相应字段的数据情况(如:几年没更新,无数据等情况) 2.确认产品逻辑已无效(产品经理邮件确认) 3.数据备份 4.将数据清空(置为0或空) 5.测试环境中删除引用页面 6.修改定时程序,存储过 ...

  9. 10_MySQL DQL_子查询(嵌套的select)

    #子查询/* 含义:出现在其他语句中的select语句,称为子查询(内查询)           内部嵌套其他select语句的查询,称为主查询(外查询) 特点: 1.子查询都会放在小括号内 2.单行 ...

  10. python 输出两个日期之间的天数

    from datetime import date f_date = date(, , ) l_date = date(, , ) delta = l_date - f_date print(delt ...