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

题意:对于动态计分的 Codeforces Round ,已知每题的 score 是根据 Round 参加人数和该题过题人数计算,两者之比结合上图得出该题的分数。某人在该题的得分为 score*(1−t/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\n");
}
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\n" , ans);
}
return 0;
}

codeforces 807 D. Dynamic Problem Scoring(贪心+思维)的更多相关文章

  1. 【codeforces 807D】Dynamic Problem Scoring

    [题目链接]:http://codeforces.com/contest/807/problem/D [题意] 给出n个人的比赛信息; 5道题 每道题,或是没被解决->用-1表示; 或者给出解题 ...

  2. codeforces 807 E. Prairie Partition(贪心+思维)

    题目链接:http://codeforces.com/contest/807/problem/E 题意:已知每个数都能用x=1 + 2 + 4 + ... + 2k - 1 + r (k ≥ 0, 0 ...

  3. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) D - Dynamic Problem Scoring

    地址:http://codeforces.com/contest/807/problem/D 题目: D. Dynamic Problem Scoring time limit per test 2 ...

  4. Codeforces Round #412 Div. 2 补题 D. Dynamic Problem Scoring

    D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  5. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

  6. AC日记——Dynamic Problem Scoring codeforces 807d

    Dynamic Problem Scoring 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <io ...

  7. codeforces 798 C. Mike and gcd problem(贪心+思维+数论)

    题目链接:http://codeforces.com/contest/798/problem/C 题意:给出一串数字,问如果这串数字的gcd大于1,如果不是那么有这样的操作,删除ai, ai + 1 ...

  8. CodeForces 518E Arthur and Questions(贪心 + 思维)题解

    题意:给你a1~an,k,要求a1 + ... + ak < a2 + .... + ak+1 < a3 + ... + ak+2 <...,然后这里的ai有可能是?,要求你填?的数 ...

  9. 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas

    题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...

随机推荐

  1. Socket编程:UDP和TCP概论及案例

    网络编程的三要素: 1.IP地址  2.端口 3.协议 什么是Socket? Socket就是通信链路的端点称"套接词". 基于TCP协议的Socket网络通信: 用来实现双向安全 ...

  2. c++/c关于函数指针

    顺便提一句:指针也是一种变量类型 和 int double 这些类型是一个级别 不同的是它的值是地址 #include "stdafx.h"#include<stdlib.h ...

  3. Java泛型使用的简单介绍

    目录 一. 泛型是什么 二. 使用泛型有什么好处 三. 泛型类 四. 泛型接口 五. 泛型方法 六. 限定类型变量 七. 泛型通配符 7.1 上界通配符 7.2 下界通配符 7.3 无限定通配符 八. ...

  4. java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍

    这一节我们来接着介绍JUC集合:CopyOnWriteArraySet和ConcurrentSkipListSet.从名字上来看我们知道CopyOnWriteArraySet与上一节讲到的CopyOn ...

  5. 【Vue的路由,SPA概念】

    前言 本章是为了以后实现前端页面的搭建而写的, 重点在于如何实现 单页Web应用 因为相对于以前的传统多页面web,有很大的缺陷. 那么就必须了解一下Vue的路由设置. SPA的概念 总的而言,我们知 ...

  6. java NIO知多少

    背景 Linux系统中的IO操作内部相当复杂,下面是一张带图片的LinuxIO相关层级关系: 下面是一个简化版本Linux内部IO层级图: 对此我的理解,java程序员版本的IO理解: java中的I ...

  7. opencv3 编程入门学习笔记(一): 基本函数介绍

    滤波 blur (均值滤波) 均值滤波是典型的线性滤波算法, 主要方法为领域平均法(即用一片图像区域的各个像素的平均值来代替原图像中的各个像素值) 缺点: 不能很好的保护图像细节, 在图像去噪的同时也 ...

  8. 从SpringBoot构建十万博文聊聊高并发文章浏览量设计

    前言 在经历了,缓存.限流.布隆穿透等等一系列加强功能,十万博客基本算是成型,网站上线以后也加入了百度统计来见证十万+ 的整个过程. 但是百度统计并不能对每篇博文进行详细的浏览量统计,如果做一些热点博 ...

  9. 实现API管理系统的几个重要关键词

    管理API的需求源自于Web API开展业务.从2006年开始,然后逐渐成熟,并在2016年之前进入市场.无论是通过代理现有API的管理网关.本身作为用于部署API本身的网关的一部分,还是作为连接层在 ...

  10. CZGL.Auth: ASP.NET Core Jwt角色授权快速配置库

    CZGL.Auth CZGL.Auth 是一个基于 Jwt 实现的快速角色授权库,ASP.Net Core 的 Identity 默认的授权是 Cookie.而 Jwt 授权只提供了基础实现和接口,需 ...