zoukankan      html  css  js  c++  java
  • POJ2976 Dropping tests —— 01分数规划 二分法

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

    Dropping tests
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 13615   Accepted: 4780

    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

     
     
     
    题解:
     
     
     
     
    代码如下:
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <vector>
     7 #include <queue>
     8 #include <stack>
     9 #include <map>
    10 #include <string>
    11 #include <set>
    12 #define ms(a,b) memset((a),(b),sizeof((a)))
    13 using namespace std;
    14 typedef long long LL;
    15 const double EPS = 1e-8;
    16 const int INF = 2e9;
    17 const LL LNF = 2e18;
    18 const int MAXN = 1e3+10;
    19 
    20 int a[MAXN], b[MAXN];
    21 double d[MAXN];
    22 int n, k;
    23 
    24 bool test(double L)
    25 {
    26     for(int i = 1; i<=n; i++)
    27         d[i] = 1.0*a[i] - L*b[i];
    28     sort(d+1, d+1+n);
    29     double sum = 0;
    30     for(int i = k+1; i<=n; i++) //舍弃前k小的数
    31         sum += d[i];
    32     return sum>=0;
    33 }
    34 
    35 int main()
    36 {
    37     while(scanf("%d%d", &n, &k) && (n||k))
    38     {
    39         for(int i = 1; i<=n; i++)
    40             scanf("%d", &a[i]);
    41         for(int i = 1; i<=n; i++)
    42             scanf("%d", &b[i]);
    43 
    44         double l = 0, r = 1.0;
    45         while(l+EPS<=r)
    46         {
    47             double mid = (l+r)/2;
    48             if(test(mid))
    49                 l = mid + EPS;
    50             else
    51                 r = mid - EPS;
    52         }
    53         printf("%.0f
    ", r*100);
    54     }
    55 }
    View Code
     
  • 相关阅读:
    Maven学习笔记
    [学习笔记] 网络流
    [Contest on 2021.11.3] 女子口阿
    [杂题合集] 25 岁小伙突然没了心跳,他的习惯很多年轻人都有!
    CSP 2021 提高组游记
    [题目小结] 可持久化数据结构
    [学习笔记] 无向图和有向图的连通分量
    [Contest on 2021.10.17] HustOJ 就是个 **
    [Contest on 2021.10.15] 细思极恐
    妖怪寺外,灯火通明
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/7563213.html
Copyright © 2011-2022 走看看