关闭

【poj 2976】 Dropping tests 二分(分数优化)

标签: poj
2568人阅读 评论(1) 收藏 举报
分类:

题目http://poj.org/problem?id=2976

Dropping tests

Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 9121 Accepted: 3194

Description

In a certain course, you take n tests. If you get ai out of bi questions correct on test i, your cumulative average is defined to be

.

Given your test scores and a positive integer k, determine how high you can make your cumulative average if you are allowed to drop any k of your test scores.

Suppose you take 3 tests with scores of 5/5, 0/1, and 2/6. Without dropping any tests, your cumulative average is . However, if you drop the third test, your cumulative average becomes .

Input

The input test file will contain multiple test cases, each containing exactly three lines. The first line contains two integers, 1 ≤ n ≤ 1000 and 0 ≤ k < n. The second line contains n integers indicating ai for all i. The third line contains n positive integers indicating bi for all i. It is guaranteed that 0 ≤ ai ≤ bi ≤ 1, 000, 000, 000. The end-of-file is marked by a test case with n = k = 0 and should not be processed.

Output

For each test case, write a single line with the highest cumulative average possible after dropping k of the given test scores. The average should be rounded to the nearest integer.

Sample Input
3 1
5 0 2
5 1 6
4 2
1 2 7 9
5 6 7 9
0 0

Sample Output
83
100

Hint

To avoid ambiguities due to rounding errors, the judge tests have been constructed so that all answers are at least 0.001 away from a decision boundary (i.e., you can assume that the average is never 83.4997).

Source

题意:最大化平均值

思路:贪心是错的,分数优化即可;
判断时a_i – x * b_i排序前k》=0————》true

代码

#include<iostream>
#include<queue>
#include<cmath>
#include<stdio.h>
#include<algorithm>
using namespace std;

int n,k;
double a[1005],b[1005];
double y[1005];
double cmp(double a,double b)
{
    return a>b;
}
bool C(double x)
{

    double tmp=0;
    for(int i=1;i<=n;i++)
    {
        y[i]=a[i]-x*b[i];
    }
    sort(y+1,y+1+n,cmp);
    for(int i=1;i<=k;i++)
    {
        tmp+=y[i];
    } 

    if(tmp>=0) return 1;
    return 0;

} 
void solve()
{
    double l=0,r=1.0,mid;
    for(int i=0;i<100;i++)
    {
        mid=(l+r)/2;
        if(C(mid))
        {
            l=mid;
        }else  r=mid;
    }

    printf("%.0lf\n",(double)mid*100.0);
}

int main()
{
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        if(!n&&!k) return 0;
        for(int i=1;i<=n;i++)
        {
            scanf("%lf",&a[i]);
        }

        for(int j=1;j<=n;j++)
        scanf("%lf",&b[j]);
        k=n-k;
        solve();
    }
    return 0;
}
1
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【poj 2976】 Dropping tests 二分(分数优化)

题目:http://poj.org/problem?id=2976Dropping testsTime Limit: 1000MS Memory Limit: 65536K Total Subm...
  • ALPS233
  • ALPS233
  • 2016-06-01 18:42
  • 2568

poj2976(二分,最大值平均化模板)Dropping tests

/* 浮点数的精度问题是通过多次循环实现的 (n-k)个数,最大化平均值 */ #include #include #include #include using namespace std; c...
  • update7
  • update7
  • 2017-08-06 21:21
  • 10154

POJ 2104 K-th Number【整体二分 + 树状数组】

本来只是想学一下CDQ,还是先把整体二分搞懂一点。这题窝几个月前分别用划分树,树套树,主席树和挑战上介绍的分桶法实现了一发(然而现在都忘得差不多了) 最快的是划分树,其次是主席树,然后是树套树,...
  • Yukizzz
  • Yukizzz
  • 2016-04-29 01:09
  • 1390

POJ2976 - Dropping tests - 二分+01分数规划+思维

1.题目描述: Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissi...
  • dragon60066
  • dragon60066
  • 2017-03-04 19:31
  • 123

POJ 2976 Dropping tests (01分数规划+二分)

Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7360   ...
  • u013068502
  • u013068502
  • 2015-05-16 09:27
  • 603

poj2976:dropping tests(0/1分数规划)

0/1分数规划
  • qq_35649707
  • qq_35649707
  • 2017-05-28 10:53
  • 182

【POJ 2976】Dropping tests&01分数规划详解

01分数规划是指这样一类问题:有n个物品,第i个物品有aia_i的价值,价格是bib_i,然后取出若干个物品使得∑ai∑bi\frac{\sum a_i}{\sum b_i}取到最值。 不妨设这个最...
  • Ripped
  • Ripped
  • 2017-04-25 08:10
  • 140

POJ-2976:Dropping tests【01分数规划】

Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12059  ...
  • swust_Three
  • swust_Three
  • 2017-04-27 20:08
  • 172

poj 2976 Dropping tests(基础的01分数规划)

做了几天的01分数规划,总结一下吧。个人感觉无论是最优比例生成环还是最优比率生成树或是最小割神马的,基本思路都是一样的即参数搜索,设出一个函数f[λ],每次二分λ,直到f[λ] = 0。而最优比例生成...
  • u013081425
  • u013081425
  • 2014-05-27 15:29
  • 860

POJ 2976 Dropping tests & 分数规划讲解

 http://poj.org/problem?id=2976
  • Unin88
  • Unin88
  • 2014-09-19 21:02
  • 351
    个人资料
    • 访问:148240次
    • 积分:3499
    • 等级:
    • 排名:第10983名
    • 原创:183篇
    • 转载:2篇
    • 译文:0篇
    • 评论:18条
    博客专栏
    最新评论