codeforces 807 D. Dynamic Problem Scoring(贪心+思维)
题目链接: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(贪心+思维)的更多相关文章
- 【codeforces 807D】Dynamic Problem Scoring
[题目链接]:http://codeforces.com/contest/807/problem/D [题意] 给出n个人的比赛信息; 5道题 每道题,或是没被解决->用-1表示; 或者给出解题 ...
- codeforces 807 E. Prairie Partition(贪心+思维)
题目链接:http://codeforces.com/contest/807/problem/E 题意:已知每个数都能用x=1 + 2 + 4 + ... + 2k - 1 + r (k ≥ 0, 0 ...
- 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 ...
- 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 ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- AC日记——Dynamic Problem Scoring codeforces 807d
Dynamic Problem Scoring 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <io ...
- codeforces 798 C. Mike and gcd problem(贪心+思维+数论)
题目链接:http://codeforces.com/contest/798/problem/C 题意:给出一串数字,问如果这串数字的gcd大于1,如果不是那么有这样的操作,删除ai, ai + 1 ...
- CodeForces 518E Arthur and Questions(贪心 + 思维)题解
题意:给你a1~an,k,要求a1 + ... + ak < a2 + .... + ak+1 < a3 + ... + ak+2 <...,然后这里的ai有可能是?,要求你填?的数 ...
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...
随机推荐
- git项目版本处理--远程分支重新拉取本地代码如何处理
最近在eclipse 上用git拉取分支,提交代码因为提交代码提交了一些配置文件造成 后续同事提交代码一直出现代码冲突问题 项目老大又重新拉取了一条代码 同样的分支名字 当时有点蒙不知道接着怎么弄:场 ...
- 控制台出现_ob_:Obsever
我遇到一个问题:我的代码想让他点击之后得到经纬度坐标数组,然后我就这样写了 然而控制台却读取出了
- Eclipse中代码自动添加注释及代码注释模板
介绍 为了提高代码的可读性以及为了有些代码有洁癖的人的需求,我们要从学生到职业进行迈进的过程中,必须把以前的那种代码可读性不高的习惯改掉,因为我们必须要与企业接轨.. 好了,废话不多说,反正就是提升自 ...
- Flink 源码解析 —— 深度解析 Flink 是如何管理好内存的?
前言 如今,许多用于分析大型数据集的开源系统都是用 Java 或者是基于 JVM 的编程语言实现的.最着名的例子是 Apache Hadoop,还有较新的框架,如 Apache Spark.Apach ...
- 深入浅出Apriori关联分析算法(一)
在美国有这样一家奇怪的超市,它将啤酒与尿布这样两个奇怪的东西放在一起进行销售,并且最终让啤酒与尿布这两个看起来没有关联的东西的销量双双增加.这家超市的名字叫做沃尔玛. 你会不会觉得有些不可思议?虽然事 ...
- HashMap与ConcurrentHashMap在Java8的改进
链接:http://www.cnblogs.com/huaizuo/archive/2016/04/20/5413069.html#undefined http://www.cnblogs.com/h ...
- Python爬虫视频教程
├─第1章_[第0周]网络爬虫之前奏 │ ├─第1节_"网络爬虫"课程内容导学 │ │ 第1部分_全课程内容导学.mp4 │ │ 第2部分_全课程内容导学(WS00单元)学习资料. ...
- spark读取pg数据库报错操作符不存在
代码: Properties connectionProperties = new Properties(); connectionProperties.put("user", C ...
- Coablt strike官方教程中文版
安装和设置 系统要求 Cobalt Strike的最低系统要求 2 GHz +以上的cpu 2 GB RAM 500MB +可用空间 在Amazon的EC2上,至少使用较高核数的CPU(c1.medi ...
- Springboot源码分析之AbstractAdvisorAutoProxyCreator
摘要: Spring的代理在上层中主要分为ProxyCreatorSupport和ProxyProcessorSupport,前者是基于代理工厂,后者是基于后置处理器,也可以认为后置就是自动代理器.当 ...