NOIP2017 d1t1 期末考试

题目描述:

有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布。第i位同学希望在第ti天或之前得知所.有.课程的成绩。如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生C不愉快度。对于第i门课程,按照原本的计划,会在第bi天公布成绩。有如下两种操作可以调整公布成绩的时间:

1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟一天,公布课程Y成绩的时间提前一天;每次操作产生A不愉快度。

2.增加一部分老师负责学科Z,这将导致学科Z的出成绩时间提前一天;每次操作产生B不愉快度。

上面两种操作中的参数X,Y,Z均可任意指定,每种操作均可以执行多次,每次执行时都可以重新指定参数。现在希望你通过合理的操作,使得最后总的不愉快度之和最小

题解:

一开始的思路是这样的:由于这道题比较复杂,有多个变量,所以不太可能直接出答案,那么差不多就应该是枚举所有的出成绩天数了

推论一:出成绩的时间只取决于最后一课出成绩的时间,所以想要在第n天出成绩的话,就要让最后一课出成绩的时间小于等于第x天

推论二:让最后一课提前一天有两种方式,A<B那么就应该优先考虑方式一,A>B那么就应该优先考虑方式二,(但是注意方式一的使用次数是有限制的,不能让本来出成绩时间小于等于第x天的课程变为出成绩时间大于第x天的课程,因为这样就需要额外使用方式二将它的成绩时间移回第x天,得不偿失)

代码一:

for(;;)

{

sort 排序所有的成绩时间

if (最晚一科出成绩的时间<=x)break;

if (最早一科出成绩的时间<x&&A<B)

  执行方案一

else

  执行方案二

}

但是这样时间复杂度很高,为O(n的3次方),我们注意到第x天前和第x天后后的天数分别具有相同的性质,所以我们可以把他们分别组合起来

如果A<B那么就尽可能多得用方案一,方案一用不了后再用方案二

如果A>B,那么就一直用方案二

代码二:

daysbeforex=SUM{x-b[i]}(x<b[i])

daysafterx=SUM{b[i]-x}(x>b[i])

if (A<B)

{

  if (daysbeforex>daysafterx)

    return A*daysafterx;

  else

    return daysbeforex*A+(daysafterx-daysbeforex)*B;

}

else

  return daysafterx*b;

这样复杂度就降到了O(n的2次方),当然不难发现其实还可以再优化到O(n),只要for遍历一次就可以求出来第i天出成绩所产生的不愉悦度,只要统计出每次成绩时间由大于i变为小于i的天数即可,这就是满分做法,我就不详细列出代码了。

代码三:………………

时间: 2024-10-10 08:27:27

NOIP2017 d1t1 期末考试的相关文章

高等代数期末考试

高等代数的最后一站,有惊无险. 高等代数期末考试试题

数据库期末考试复习题 第一章

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27820507 一.单项选择题: 1. 位于用户和操作系统之间的一层数据管理软件是  C    . A.DBS  B.DB  C.DBMS  D.MIS 2. 数据库系统中的数据模型通常由    A     三部分组成. A.数据结构.数据操作和完整性约束 B.数据定义.数据操作和安全性约束 C.数据结构.数据管理和数据保护 D.数据定义.数据管理和运行控制 3. 

复旦大学2016--2017学年第二学期(16级)高等代数II期末考试第七大题解答

七.(本题10分)  设 $n$ 阶复方阵 $A$ 的特征多项式为 $f(\lambda)$, 复系数多项式 $g(\lambda)$ 满足 $(f(\lambda),g'(\lambda))=1$. 证明: $A$ 可对角化的充要条件是 $g(A)$ 可对角化. 证明  先证必要性. 设 $A$ 可对角化, 即存在非异阵 $P$, 使得 $P^{-1}AP=\Lambda=\mathrm{diag}\{\lambda_1,\lambda_2,\cdots,\lambda_n\}$ 为对角阵,

中国MOOC_面向对象程序设计——Java语言_期末考试编程题_1细胞自动机

期末考试编程题 返回 这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成绩. 1 细胞自动机(30分) 题目内容: 这是细胞自动机的非图形版本.细胞自动机是指在一个二维网格内,每一个网格是一个细胞.每个细胞有活和死两种状态. 初始时刻,有些细胞是活的,有些细胞是死的.自动机的每一步,根据每个细胞周围8个格子内的其他细胞的生存情况决定这个细胞下一步是否存活.具体的规则如下:

codevs 2915 期末考试

时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 期末考试要来了,某同学正在努力复习. 他要复习N个知识点,每个知识点需要一定的知识做基础. 现给你一个AOV网,其中有M条边<Ai,Bi>. 问他能考得怎样?(假设他只要复习了就不会出错,没复习就什么也不会) 输入描述 Input Description 两个正整数N,M M行,Ai  Bi. 输出描述 Output Description 若能考满分,输出Oh,yeah! 若能及

Linux系统管理期末考试小结

这学期主要讲Linux系统管理,内容分为六章:了解并安装Linux系统,文件和目录管理,用户.组和权限管理,磁盘与文件系统管理,系统软件包管理,系统进程和服务管理.期末考试要求每个学生在自己的笔记本电脑里新建虚拟机,安装rhel6系统,并设为桥接模式,然后按照考题要求进行实践操作.最后评分时,我编写了一个可以自动评分的脚本,并将脚本程序在我电脑的Linux虚拟机里设为NFS共享,然后依次在每个学生的虚拟机通过NFS共享,复制脚本到本地进行评分.试题和脚本我已在附件里共享,有兴趣的朋友可以下载练习

复旦大学2015--2016学年第二学期高等代数II期末考试情况分析

一.期末考试成绩班级前几名 胡晓波(90).杨彦婷(88).宋卓卿(85).唐指朝(84).陈建兵(83).宋沛颖(82).王昊越(81).白睿(80).韩沅伯(80).王艺楷(80).张漠林(80).张子涵(80) 二.总成绩计算方法 平时成绩根据交作业的次数决定,本学期共交作业12次,10次以上(包括10次)100分,少一次扣10分. 总成绩=平时成绩*20%+期中考试成绩*20%+期末考试成绩*60% 三.最终成绩及人数 最终成绩 人数 A 26 A- 1 B+ 14 B 16 B- 20

nyoj757 期末考试 (优先队列)

题目757 题目信息 运行结果 本题排行 讨论区 期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣期末成绩的分数,假设完成每门功课需要一天的时间,你能帮助小T扣除的分数最小吗? 输入 输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数. (以文件结尾) 输出 输出扣除的最小分数. 样例输入 3

大学期末考试一场幻灭的游戏

每到大学一学期的最后一两个星期,我才发现原来这个学期已经快结束了,感觉好快啊,这跟高中初中觉得学期很长的想法完全相反.开学的时候每天迷迷糊糊的,没调整回状态,再后来天天忙着跟自己的专业没有关系的事情,跟女友出去逛逛吃吃,忙着准备各类比赛和答辩,学着Android,一句话就是跟自己的专业学的东西没毛钱关系没有,室友也是每天lol啊,真感觉他能成大事,我成不了,因为他能把一个游戏打的如此认真与极致. 好吧最后一个学期就这么忽然的到了这个期末每天看书预习的日子,猜着老师会出什么题目,究其原因就是平时老