Practice Link

A. gpa

题意:

有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高。

gpa计算方式如下:

\[\begin{eqnarray*}
gpa = \frac{\sum s_ic_i}{\sum s_i}
\end{eqnarray*}
\]

思路:

首先删去的课程越多,gpa肯定不会变得更差。

所以我们肯定是删去\(k\)门课程。

考虑二分答案,check的时候要满足:

\[\begin{eqnarray*}
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的更多相关文章

  1. 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 ...

  2. 2018 Multi-University Training Contest 2

    题目链接:2018 Multi-University Training Contest 2 6318 Swaps and Inversions 题意:sum=x*逆序个数+交换次数*y,使sum最小 ...

  3. 2018 Multi-University Training Contest 1

    比赛链接:2018 Multi-University Training Contest 1 6301 Distinct Values 题意:输出一个长度为n的序列,要求满足m个区间的数都不相同,并且字 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. 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 ...

  10. 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 ...

随机推荐

  1. 谷歌大脑提出:基于NAS的目标检测模型NAS-FPN,超越Mask R-CNN

    谷歌大脑提出:基于NAS的目标检测模型NAS-FPN,超越Mask R-CNN 朱晓霞发表于目标检测和深度学习订阅 235 广告关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等价格 ...

  2. 关于element ui滚动条使用

    element ui 自带的滚动条使用 在容器的直接外层添加 (需要展现滚动条的那一级) <el-scrollbar style="height:100%"></ ...

  3. c#排序sql语句查询

    排序存储的效果图: 根据id排序的sql存储过程: DECLARE @type varchar() ' ' Order By charindex(','+ convert(varchar,id) +' ...

  4. IDEA 使用与总结

    一.IDEA和常用软件下载1.IDEA激活码网站:http://idea.lanyus.com/常用软件网站 idea : https://www.jetbrains.com/idea/downloa ...

  5. 前阿里P8架构师谈如何设计优秀的API

    随着大数据.公共平台等互联网技术的日益成熟,API接口的重要性日益凸显,从公司的角度来看,API可以算作是公司一笔巨大的资产,公共API可以捕获用户.为公司做出许多贡献.对于个人来说,只要你编程,你就 ...

  6. 对WAF的一些认知

    WAF分为非嵌入型与嵌入型, 非嵌入型指的是硬WAF.云WAF.虚拟机WAF之类的:嵌入型指的是web容器模块类型WAF.代码层WAF.非嵌入型对WEB流量的解析完全是靠自身的,而嵌入型的WAF拿到的 ...

  7. goroutine的设计与实现

    goroutine背后的系统知识 http://www.sizeofvoid.net/goroutine-under-the-hood/ 下周写完

  8. docker的学习2

    docker基本命令: run 创建一个新的容器并运行一个新的命令 -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项: -d: 后台运行容器,并返回容器 ...

  9. 实现LAMP架构

    LAMP介绍 LAM(M)P: L: linux A: apache (httpd) M: mysql, mariadb M:memcached P: php, perl, python WEB资源类 ...

  10. Paper Reading:个性化推荐系统的研究进展

    论文:个性化推荐系统的研究进展 发表时间:2009 发表作者:刘建国,周涛,汪秉宏 论文链接:论文链接 本文发表在2009,对经典个性化推荐算法做了基本的介绍,是非常好的一篇中文推荐系统方面的文章. ...