zoukankan      html  css  js  c++  java
  • codeforces 807 D. Dynamic Problem Scoring(贪心+思维)

    题目链接:http://codeforces.com/contest/807/problem/D

    题意:对于动态计分的 Codeforces Round ,已知每题的 score 是根据 Round 参加人数和该题过题人数计算,两者之比结合上图得出该题的分数。某人在该题的得分为 score*(1t/250) 其中 t 表示通过该题的时间。

    已知参加该场比赛的所有参加者的过题情况(包括 Vasya 和 Petya),问如何通过增加新的参赛者(尽量少),使得 Vasya 的最终得分高于 Petya。

    题解:首先预算一下最多需要多少人,3000*4/12=10000,最多不超过10000人。

    然后就枚举一遍0~10000,需要注意的是几种情况

           if(T[1].a[j] == -1) {

                        rate[j] = 1.0 * sum[j] / (n + i);

                    }

                    else {

                        if(T[1].a[j] > T[2].a[j] && T[2].a[j] != -1) {

                            rate[j] = 1.0 * (sum[j] + i) / (n + i);

                        }

                        else {

                            rate[j] = 1.0 * sum[j] / (n + i);

                        }

                    }

    这些情况考虑了就行了。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #define inf 0X3f3f3f3f
    using namespace std;
    struct TnT {
        int a[6];
    }T[200];
    int main() {
        int n;
        double rate[6];
        int sum[6];
        memset(sum , 0 , sizeof(sum));
        scanf("%d" , &n);
        for(int i = 1 ; i <= n ; i++) {
            for(int j = 1 ; j <= 5 ; j++) {
                scanf("%d" , &T[i].a[j]);
                if(T[i].a[j] >= 0) {
                    sum[j]++;
                }
            }
        }
        int flag = 0;
        for(int i = 1 ; i <= 5 ; i++) {
            if(T[2].a[i] > T[1].a[i] || (T[2].a[i] == -1 && T[1].a[i] != -1)) {
                flag = 1;
                break;
            }
        }
        if(!flag) {
            printf("-1
    ");
        }
        else {
            int ans = -1;
            for(int i = 0 ; i <= 10000 ; i++) {
                double sum1 = 0 , sum2 = 0;
                for(int j = 1 ; j <= 5 ; j++) {
                    if(T[1].a[j] == -1) {
                        rate[j] = 1.0 * sum[j] / (n + i);
                    }
                    else {
                        if(T[1].a[j] > T[2].a[j] && T[2].a[j] != -1) {
                            rate[j] = 1.0 * (sum[j] + i) / (n + i);
                        }
                        else {
                            rate[j] = 1.0 * sum[j] / (n + i);
                        }
                    }
                }
                for(int j = 1 ; j <= 5 ; j++) {
                    if(rate[j] <= 1.0 && rate[j] > 1.0 / 2) {
                        if(T[1].a[j] >= 0) sum1 += 1.0 * 500 * (1.0 - 1.0 * T[1].a[j] / 250);
                        if(T[2].a[j] >= 0) sum2 += 1.0 * 500 * (1.0 - 1.0 * T[2].a[j] / 250);
                    }
                    if(rate[j] <= 1.0 / 2 && rate[j] > 1.0 / 4) {
                        if(T[1].a[j] >= 0) sum1 += 1.0 * 1000 * (1.0 - 1.0 * T[1].a[j] / 250);
                        if(T[2].a[j] >= 0) sum2 += 1.0 * 1000 * (1.0 - 1.0 * T[2].a[j] / 250);
                    }
                    if(rate[j] <= 1.0 / 4 && rate[j] > 1.0 / 8) {
                        if(T[1].a[j] >= 0) sum1 += 1.0 * 1500 * (1.0 - 1.0 * T[1].a[j] / 250);
                        if(T[2].a[j] >= 0) sum2 += 1.0 * 1500 * (1.0 - 1.0 * T[2].a[j] / 250);
                    }
                    if(rate[j] <= 1.0 / 8 && rate[j] > 1.0 / 16) {
                        if(T[1].a[j] >= 0) sum1 += 1.0 * 2000 * (1.0 - 1.0 * T[1].a[j] / 250);
                        if(T[2].a[j] >= 0) sum2 += 1.0 * 2000 * (1.0 - 1.0 * T[2].a[j] / 250);
                    }
                    if(rate[j] <= 1.0 / 16 && rate[j] > 1.0 / 32) {
                        if(T[1].a[j] >= 0) sum1 += 1.0 * 2500 * (1.0 - 1.0 * T[1].a[j] / 250);
                        if(T[2].a[j] >= 0) sum2 += 1.0 * 2500 * (1.0 - 1.0 * T[2].a[j] / 250);
                    }
                    if(rate[j] <= 1.0 / 32 && rate[j] > 0.0) {
                        if(T[1].a[j] >= 0) sum1 += 1.0 * 3000 * (1.0 - 1.0 * T[1].a[j] / 250);
                        if(T[2].a[j] >= 0) sum2 += 1.0 * 3000 * (1.0 - 1.0 * T[2].a[j] / 250);
                    }
                }
                if(sum1 > sum2) {
                    ans = i;
                    break;
                }
            }
            printf("%d
    " , ans);
        }
        return 0;
    }
    
  • 相关阅读:
    IP地址
    ACL访问控制列表
    DHCP原理及配置
    VRRP原理及配置
    ASP.NET CORE RAZOR :向 Razor 页面应用添加模型
    HBuilder + PHP开发环境配置
    添加相关功能
    基于stm32的水质监测系统项目基础部分详细记录
    表单数据验证方法(二)——ASP.NET后台验证
    表单数据验证方法(一)—— 使用validate.js实现表单数据验证
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/6828295.html
Copyright © 2011-2022 走看看