`
Simone_chou
  • 浏览: 192778 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Dropping tests(二分搜索)

    博客分类:
  • POJ
 
阅读更多
Dropping tests
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 5592   Accepted: 1925

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

       题意:

       给出 N (1 ~ 1000),K (0 ~ 1000000000)代表有 N 个科目的成绩,每个科目成绩都有 a,b 两种成绩,后给出 N 个 a 和 N 个 b 的成绩。现要使 y =  达到最大,当去除 K 个科目的成绩之后,y 最大能取到多大。

 

       思路:

       二分搜索。y =  ,所以

 

              100 * sigema(a) - y * sigema(b)

           = 100 * (a1 + a2 + …… an) - y * (b1 + b2 + …… bn)

           = (100 * a1 - y * b1)+ (100 * a2 - y * b2 ) + …… +(100 * an - y * bn)

           = 0 ;

 

       故枚举 y 后,先求出每个科目对应的 (100 * ai - y * bi) 值,后由大到小排序,取前面的 n - k 个。

       若求和后的值 > 0,说明 y 小了,应该往右边搜,l = mid;

       若求和后的值 < 0,说明 y 大了,应该往左边搜,r = mid;

       若求和后的值 == 0,说明 y 的值刚刚好,但是可能还有更大的值出现,应该寻找最后一个满足条件的,所以应该往右边搜,l = mid。所以区间应该为左闭右开。

   

       为什么要从大到小排序?

       若从小到大排序的话,求和的结果 < 0 将会占大多数,那么二分搜索就不会不断往左边搜,使这个平均值越来越小,而题目要求的是求最大值。那么应该要让求和结果 > 0 占大多数,那么应该由大到小排序才对。

 

       AC:

#include <cstdio>
#include <cstring>
#include <algorithm>

const int MAX = 1005;

using namespace std;

typedef long long ll;

int n, k;
double a[MAX], b[MAX], c[MAX];

int cmp (double i,double j) { return i > j; }

double Sort (double y) {
        for (int i = 0; i < n; ++i)
                c[i] = 100 * a[i] - y * b[i];

        sort (c, c + n, cmp);

        double ny = 0;
        for (int i = 0; i < n - k; ++i)
                ny += c[i];

        return ny;
}

void solve () {
        double l = 0, r = 100 + 1;

        while (r - l > 0.001) {
                double mid = l + (r - l) / 2;
                double ny = Sort(mid);

                if (ny >= 0) l = mid;
                else r = mid;
        }

        printf("%.lf\n",l);
}

int main () {

        while (~scanf("%d%d", &n, &k) && (n + k)) {

                for (int i = 0; i < n; ++i)
                        scanf("%lf", &a[i]);
                for (int i = 0; i < n; ++i)
                        scanf("%lf", &b[i]);

                solve();

        }

        return 0;
}

 

 

 

分享到:
评论

相关推荐

    分数规划.pdfadfdafsaff

    另一道题【E1 - POJ 2976 - Dropping tests】虽然没有给出详细描述,但我们可以推测它可能涉及在一定条件下选择测试,使得某些指标(如通过率)达到最优。在这种情况下,问题可能可以通过转化成分数规划的形式来解决...

    Dropping Ball using javascript.zip

    "Dropping Ball using javascript.zip" 提供了一个简单的JavaScript游戏示例,名为“Balldrop”,它利用了JavaScript的核心功能来实现一个动态的球下落效果。这个项目非常适合初学者学习,因为它涉及到基础的HTML、...

    C#,动态规划(DP)丢鸡蛋问题(Egg Dropping Puzzle)的三种算法与源代码

    各种数据结构、算法及实用的C#源...有足够多的鸡蛋时,可以采用二分查找法。有多于一个但数量有限的鸡蛋时,采用动态规划方法求解。双蛋问题 (two-egg problem) 是本问题的一个特例,曾出现于谷歌的程序员面试题中。

    Dropping-Thunder:Dropping Thunders TD模拟器

    【Dropping-Thunder:Dropping Thunders TD模拟器】 Dropping-Thunder是一个基于Java开发的塔防(TD)游戏模拟器,它允许用户创建、编辑并玩转自定义的塔防地图。塔防游戏,全称Tower Defense,是策略游戏的一种,...

    Condorcet with Dual Dropping-开源

    《Condorcet with Dual Dropping:开源选举决策机制解析》 在当代社会,选举和投票是决策过程中的重要环节,特别是在组织内部、社区选举以及更广泛的公共事务中。 Condorcet with Dual Dropping 是一种先进的选举...

    textlint-rule-no-dropping-i:Textlint规则来检查马虎字

    textlint-rule-no-dropping-i这是一个检测丢失单词的规则。 are我们正在发展。 developing我在发展。安装npm install @textlint-ja/textlint-rule-no-dropping-i用法将@textlint-ja/textlint-rule-no-dropping-i ....

    BallDropping

    BallDropping是一个会让人上瘾的噪音制造器,如果平时无聊的时候也可以当作小游戏来玩。很多小球从天而降,根据碰击角度、速度的不同,掉在鼠标划的线上会发出大珠小珠落玉盘的声音。 &lt;br&gt;你可不要小看了...

    GPS测试工具

    标题中的“GPS测试工具”指的是一个专门用于检测和分析全球定位系统(GPS)性能的应用程序。这类工具通常用于检查GPS接收机的信号质量、定位精度、速度计算以及时间同步等功能。在IT领域,GPS测试工具对于开发、调试...

    Dropping Apple by airscape-crx插件

    语言:English通过空中景观放下苹果,绝对不会错过重要的掉苹果活动,例如小睡放苹果可以帮助您与商店的预购开店保持最新并保持个人时间表...使用Airscape的Dropping Apple绝不会错过重要的Apple Droping事件,例如小睡

    textlint-rule-no-dropping-the-ra:Textlint规则以检出单词

    人が来れないんです安装npm install textlint-rule-no-dropping-the-ra用法将“ no-drop-the-ra” .textlintrc { " rules " : { " no-dropping-the-ra " : true }}贡献叉吧! 创建功能分支: git checkout -b my-new...

    Ball-Dropping-Game:827游戏的第一款游戏

    《Ball-Dropping-Game:827游戏的第一款游戏》是一款基于JavaScript开发的趣味小游戏,其核心玩法是操控角色抛掷小球。作为827游戏工作室的首款作品,这款游戏展示了JavaScript在创建互动娱乐体验方面的潜力。下面...

    解决Qt Serialbus 报错3.5char问题源码

    在使用Qt进行串行通信开发时,可能会遇到一个与Qt Serialbus模块相关的错误,提示“dropping older ADU fragments due to larger than 3.5 char”。这个错误通常出现在处理CAN(Controller Area Network)协议的数据...

    Distributed Weighted Fusion Estimators with Random Delays and Packet Dropping

    This paper is concerned with the distributed fusion estimation in sensor networks where local estimates are sent to a fusion centre for fusion estimation, with random delays and packet dropouts....

    dropping-probability.rar_网格计算_Visual_C++_

    标题中的“dropping-probability.rar”暗示了这个项目可能涉及到网络通信中数据包的丢弃概率问题,这通常与网络拥塞控制、流量管理或可靠传输相关。在这个上下文中,“网格计算”是指利用分布式计算资源,如多台...

    DotNetOpenAuth

    Compiled library that adds support for your site visitors to login with their OpenIDs by just dropping an ASP.NET control onto your page. It's that easy. An AJAX-style OpenID Selector control is also ...

    TCL-script-to-find-wireless-packet-dropping-nodes_Windows编程_tcl/tk_

    TCL script to find wireless packet dropping nodes2609002STC12C5A60S2+2.4TFT+DS1302+DS18B20+GPS+FM 自动校时收音机电子钟 STC12C5A60S2+2.4TFT+DS1302+DS18B20+GPS+FM 自动校时收音机电子钟 捣鼓了许久

    Dropping-softbody-in-2D:自学项目

    2D滴入式软体 自学项目我一直对计算机模拟物理世界充满热情。 最近,我试图在二维中模拟与刚体碰撞时的软体变形。 该程序仍未完成,但是现在我将其留在这里,过一会儿我将返回它。

    Android代码-仿微信掉落表情包效果

    中文版文档 Emoji Rain Hey, it's raining emoji! This is a really simple and funny animation for Android. You could find similar ...How many emojis will dropping in each flow, default 6 duration

    VirtualBox 2.2.0使用主机网络上网配置教程

    当VirtualBox 2.1.4升级到2.2.0以后,突然发现虚拟的系统无法使用主机的网络上网了,google了一下,发现很多人碰到这个问题,但没有解决办法,甚至有人认为是VirtualBox的Bug,其实不然。 经过研究发现,2.2.0缺省...

    Energy Harvesting Wireless Sensor Node With Temporal Death

    dropping probabilities, i.e., the packet dropping probability due to energy depletion and that due to channel error. Numerical examples are provided to illustrate the theoretical findings, and new ...

Global site tag (gtag.js) - Google Analytics