2018 Nowcoder Multi-University Training Contest 5
A. gpa
题意:
有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高。
gpa计算方式如下:
gpa = \frac{\sum s_ic_i}{\sum s_i}
\end{eqnarray*}
\]
思路:
首先删去的课程越多,gpa肯定不会变得更差。
所以我们肯定是删去\(k\)门课程。
考虑二分答案,check的时候要满足:
gpa &\leq& \frac{\sum s_ic_i}{\sum s_i} \\
gpa \cdot \sum s_i &\leq& \sum s_ic_i \\
\sum s_i \cdot gpa &\leq& \sum s_ic_i \\
\sum s_i \cdot (gpa - c_i) &\leq& 0
\end{eqnarray*}
\]
那么check的时候贪心选取\(n - k\)个即可。
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define N 100010
#define pii pair <int, int>
#define fi first
#define se second
const db eps = 1e-10;
int n, k; pii a[N];
bool ok(db x) {
    vector <db> vec;
    for (int i = 1; i <= n; ++i) {
        vec.push_back(a[i].fi * (x - a[i].se));
    }
    sort(vec.begin(), vec.end());
    db tot = 0;
    for (int i = 0; i < n - k; ++i) {
        tot += vec[i];
    }
    return tot <= 0 || fabs(tot - 0) < eps;
}
int main() {
    while (scanf("%d%d", &n, &k) != EOF) {
        for (int i = 1; i <= n; ++i) {
            scanf("%d", &a[i].fi);
        }
        for (int i = 1; i <= n; ++i) {
            scanf("%d", &a[i].se);
        }
        db l = 0, r = 1e3, res = 0;
        while (fabs(r - l) >= eps) {
            db mid = (l + r) / 2;
            if (ok(mid)) {
                l = mid;
                res = mid;
            } else {
                r = mid;
            }
        }
        printf("%.10f\n", res);
    }
    return 0;
}
G. max
题意:
给出\(c\)和\(n\),要求找到一对\((a, b)\)满足\(1 \leq a, b \leq n\)使得\(gcd(a, b) = c\)并且最大化\(a \cdot b\)
思路:
- \(c > n\)时无解
 - \(c = n\)时选择\((n, n)\)
 - \(c < n\)时在\([1, \frac{n}{c}]\)中选取两个互质的数再分别乘上\(c\)
 
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll c, n;
int main() {
    while (scanf("%lld%lld", &c, &n) != EOF) {
        if (c > n) {
            puts("-1");
            continue;
        }
        ll x = n / c;
        ll res = c * c;
        if (x > 1) {
            res *= x * (x - 1);
        }
        printf("%lld\n", res);
    }
    return 0;
}
J. plan
题意:
有\(n\)个人去住宿,双人房的价格为\(p_2\), 三人房的价格为\(p_3\),要求将\(n\)个人全都安排好住宿的最小代价是多少,不一定恰好住满。
思路:
大范围直接除2, 除3, 小范围暴力dp一下。
代码:
#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define ll long long
#define ll long long
ll n, p2, p3;
ll f[N];
ll DFS(int x) {
	if (x <= 0) {
		return 0;
	}
	if (f[x] != -1) {
		return f[x];
	}
	return f[x] = min(p2 + DFS(x - 2), p3 + DFS(x - 3));
}
int main() {
	while (scanf("%lld%lld%lld", &n, &p2, &p3) != EOF) {
		memset(f, -1, sizeof f);
		if (n <= 1000000) {
			printf("%lld\n", DFS(n));
		} else {
			ll res = 1e18;
			ll m;
			for (int i = 0; i < 1000000; ++i) {
				m = n - i;
				res = min(res, p2 * (m / 2) + DFS(i + m % 2));
				res = min(res, p3 * (m / 3) + DFS(i + m % 3));
			}
			printf("%lld\n", res);
		}
	}
	return 0;
}
												
											2018 Nowcoder Multi-University Training Contest 5的更多相关文章
- HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】
		
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...
 - 2018 Multi-University Training Contest 2
		
题目链接:2018 Multi-University Training Contest 2 6318 Swaps and Inversions 题意:sum=x*逆序个数+交换次数*y,使sum最小 ...
 - 2018 Multi-University Training Contest 1
		
比赛链接:2018 Multi-University Training Contest 1 6301 Distinct Values 题意:输出一个长度为n的序列,要求满足m个区间的数都不相同,并且字 ...
 - hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)
		
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
 - 2018 Multi-University Training Contest 4 Problem J. Let Sudoku Rotate 【DFS+剪枝+矩阵旋转】
		
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6341 Problem J. Let Sudoku Rotate Time Limit: 2000/100 ...
 - 2018 Multi-University Training Contest 4 Problem K. Expression in Memories 【模拟】
		
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6342 Problem K. Expression in Memories Time Limit: 200 ...
 - 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】
		
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...
 - 2018 Multi-University Training Contest 4 Problem L. Graph Theory Homework 【YY】
		
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6343 Problem L. Graph Theory Homework Time Limit: 2000 ...
 - 2018 Multi-University Training Contest 4 Problem B. Harvest of Apples 【莫队+排列组合+逆元预处理技巧】
		
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 Problem B. Harvest of Apples Time Limit: 4000/200 ...
 - 2018 Multi-University Training Contest 1 Distinct Values 【贪心 + set】
		
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6301 Distinct Values Time Limit: 4000/2000 MS (Java/Ot ...
 
随机推荐
- shell习题第27题:带选项的增删用户脚本
			
[题目要求] 写一个支持选项的增加或删除用户的shell脚本 #!/bin/bash ]; then echo "Wrong, use bash $0 --add username, or ...
 - AtCoder练习
			
1. 3721 Smuggling Marbles 大意: 给定$n+1$节点树, $0$为根节点, 初始在一些节点放一个石子, 然后按顺序进行如下操作. 若$0$节点有石子, 则移入盒子 所有石子移 ...
 - 怎样理解prototype对象的constructor属性
			
function Person(name){ this.name = name; } var lilei = new Person("Lilei"); lilei.construc ...
 - (五)mybatis之一对一关系
			
一.需求分析 需求:查询订单信息关联查询用户信息 分析:一条订单只能由一个消费者来下单,也就是说从订单的角度来说与消费者是一对一的关系. 二.建数据库表和实体对象 其中订单表中的字段user_id对应 ...
 - MySQL存储的字段是不区分大小写的,你知道吗?
			
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 00 简单回顾 之前写过一篇关于mysql 对表大小写敏感的问题,其实在mysql中字段存储的内容是不区分大小写的,本篇进 ...
 - ArrayList和CopyOnWriteArrayList(转载)
			
这篇文章的目的如下: 了解一下ArrayList和CopyOnWriteArrayList的增删改查实现原理 看看为什么说ArrayList查询快而增删慢? CopyOnWriteArrayList为 ...
 - mount命令解析
			
可以参考两位大神的理解 Linux mount 命令 Linux的mount命令详解
 - 【Flask+Redis】 python学习第一章 - 7.0 断言 数据库测试 redis学习
			
assert 断言 def div(num1, num2): # 断言 assert isinstance(num1, int), "值类型错误" assert isinstanc ...
 - haproxy??
			
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保 ...
 - VUE 单选下拉框Select中动态加载 默认选中第一个
			
<lable>分类情况</lable> <select v-model="content.tid"> <option v-for=&quo ...