P1678题库链接:https://www.luogu.org/problem/P1678

难度:普及-

算法标签:模拟,贪心,排序,二分查找

1.朴素模拟 O(m*n) 得分30

先将m个学校的录取分数线排序,再用每名考生的成绩依次寻找第i个大学(若某个大学的录取分数线大于等于考生的成绩,即为第i个大学),该考生的成绩在第i-1个与第i个大学的录取分数线之间,用第i-1个和第i个大学的录取分数线分别减去该考生的成绩,取绝对值,因为要求出最小值,则用sum加上两者取绝对值后的较小值,最后sum即为答案

 #include <cstdio>
#include <algorithm>
using namespace std;
int m, n, a[], b[];
int main()
{
scanf("%d%d", &m, &n);
int sum = ;
for(int i = ; i < m; ++i)
scanf("%d", &a[i]);
for(int i = ; i < n; ++i)
scanf("%d", &b[i]);
sort(a, a + m);
for(int i = ; i < n; ++i)
{
for(int j = ; j < m; ++j)
{
if(b[i] <= a[j])
{
if(j == ) sum += a[] - b[i];
else sum += min(abs(a[j] - b[i]), abs(a[j - ] - b[i]));
break;
}
}
}
printf("%d\n", sum);
return ;
}

2.二分查找优化 O(log(m)*n) 得分100

利用二分查找来找到每名考生的第i个大学,其查找过程只需要log(m)次,可以解决时间复杂度较大的问题,其余与朴素算法同理

 #include <cstdio>
#include <algorithm>
using namespace std;
int m, n, a[], b[];
int main()
{
scanf("%d%d", &m, &n);
int sum = ;
for(int i = ; i < m; ++i)
scanf("%d", &a[i]);
for(int i = ; i < n; ++i)
scanf("%d", &b[i]);
sort(a, a + m);
for(int i = ; i < n; ++i)
{
int l = , r = m - ;
while(l < r)
{
int mid = (l + r) / ;
if(b[i] >= a[mid]) l = mid + ;
else if(b[i] < a[mid]) r = mid;
}
if(b[i] <= a[]) sum += a[] - b[i];
else sum += min(abs(a[l - ] - b[i]), abs(a[l] - b[i]));
}
printf("%d\n", sum);
return ;
}

P1678 烦恼的高考志愿的更多相关文章

  1. 洛谷 P1678 烦恼的高考志愿

    题目背景 计算机竞赛小组的神牛V神终于结束了万恶的高考,然而作为班长的他还不能闲下来,班主任老t给了他一个艰巨的任务:帮同学找出最合理的大学填报方案.可是v神太忙了,身后还有一群小姑娘等着和他约会,于 ...

  2. P1678 烦恼的高考志愿(二分)

    emmmm,我感觉我在解题的过程中还是有点吃亏的,因为,我知道是二分,只是大概知道怎么分,没有管这道到底是需要怎样的二分.然后在题上卡了很久. 思路:要找到填报学校的录取线x和自己的分数y的绝对值最小 ...

  3. 中国高考志愿填报与职业趋势分析 - ActiveReports 大数据分析报告

    中国高考志愿填报与职业趋势分析 1977年中国高考制度恢复,重新开启了人才成长之门.40多年来,高考累积录取人数增长了27倍, 2.28亿人报名,9900万名高素质人才先后通过了中国高等教育的培养,高 ...

  4. 高考志愿填报:java 软件 程序员 目前的就业现状

    大约在17年前,也就是2000年,学计算机专业的学生可以有大部分都进入本专业,并且就业非常容易.哪怕只会office套件,想找个工作也很简单.那时候学计算机就是最热门的行业. 那时候,搞Java的还是 ...

  5. 扒一扒IT大佬高考:马云数学1分考北大 李彦宏是状元

    http://news.cnblogs.com/n/522622/ 高考今天正式拉开序幕,而像李彦宏.马云等 IT 大佬之前也都参加过高考,他们成绩又都是怎样的呢? 马化腾:放弃天文梦选择计算机 20 ...

  6. Python预测2020高考分数和录取情况可能是这样

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:打磨虾 “迟到”了一个月的高考终于要来了. 正好我得到了一份山东新高 ...

  7. Python预测2020高考分数和录取情况

    “迟到”了一个月的高考终于要来了. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识. ...

  8. 思达index网站

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. IT菜鸟的生存指南(一)那些人才适合从事IT行业

    此文献给那些刚误入IT行业的小菜鸟们,此文无法教你如何"当上CEO,迎娶白富美",那是电视剧情.现实IT行业里危机重重,竞争激励.这里教你的是如何生存.生存.生存- Just do ...

随机推荐

  1. PAT甲级——1001 A+B Format (20分)

    Calculate a+b and output the sum in standard format – that is, the digits must be separated into gro ...

  2. CodeForces 438D The Child and Sequence (线段树 暴力)

    传送门 题目大意: 给你一个序列,要求在序列上维护三个操作: 1)区间求和 2)区间取模 3)单点修改 这里的操作二很讨厌,取模必须模到叶子节点上,否则跑出来肯定是错的.没有操作二就是线段树水题了. ...

  3. USB Reverse Tether (a dirty solution)

    Tether your android phone to your PC using USB cable could share your 3g Internet connection with PC ...

  4. Sqlite教程(3) SQlite Query

    Configuration是属於util工具包. 把所有环境设置都定义在Configuration工具包里,那麽这个Configuration就是独立的单一入囗. 在架构上,可以提高耦合度,而且出Bu ...

  5. Hibernate/JPA中@Where使用时注意

    在使用Hibernate或者JPA时,我们经常会使用@Where注解实现查询过滤,在实体类上.实体属性上.查询语句上都有应用. 例如: @Where(clause = "status != ...

  6. shiro PermissionUtil

    package org.linlinjava.litemall.admin.util; import org.apache.shiro.authz.annotation.RequiresPermiss ...

  7. 吴裕雄--天生自然 JAVA开发学习:多线程编程

    class RunnableDemo implements Runnable { private Thread t; private String threadName; RunnableDemo( ...

  8. 一、安装Docker CE

    卸载旧版本 较旧版本的Docker被称为docker或docker-engine.如果已安装这些,需要卸载以及相关的依赖项. $ sudo yum remove docker \ docker-cli ...

  9. JAVA循环结构学校上机经常遇到的几题 笔记

    package homework.class4; import java.util.*; import java.util.stream.Collectors; import java.util.st ...

  10. PolarDB阿里初赛问题记录 PolarDB 阿里 中间件 比赛 性能 工程手册

    Contents 这篇纯碎是碎碎念记录. 每个value都是4KB,总共最多会写6400W个value,算下来就是64 * 1000 * 1000 * 4 * 1024 Bytes ≈ 256G. 每 ...