题目

分析

如果我们确定最后的成绩公布日期t,那么就可以贪心来求出最小的不愉快度:

首先,那些希望的日期小于t的同学,会产生不愉快度,这个用前缀和可以来处理,

对于课程,我们要将大于t的课程全部拖到t,

可以考虑有A、B操作,

首先我们知道,操作的总数是固定的

当A>=B时,尽量选B会最优,于是,对于将大于t的课程全部用B操作拖到t。

当A<=B时,尽量选A会最优,那么由于A有数量限制,所以剩下的选B。

这些就可以用前缀和来处理(笨菜鸟无知,用了权值线段树)。

这个贪心的时间复杂度为O(1)。

所以枚举t即可。

另:

由于t的最优值为单峰函数,也可以用三分。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const long long maxlongint=2147483647;
const int mo=1000000007;
const int N=100000;
using namespace std;
long long ss[N*6][2],a,b,c,si[N*6][2],ans=maxlongint*maxlongint;
int n,m,tot;
void put(int v,int l,int r,int x,int y)
{
if(l==r)
{
si[v][y]++;
ss[v][y]+=x;
return;
}
int mid=(l+r)/2;
if(x<=mid) put(v*2,l,mid,x,y);
else put(v*2+1,mid+1,r,x,y);
ss[v][y]=ss[v*2][y]+ss[v*2+1][y];
si[v][y]=si[v*2][y]+si[v*2+1][y];
}
long long find(int v,int l,int r,int x,int y,int z)
{
if(x>y) return 0;
if(l==x && y==r)
{
return ss[v][z];
}
int mid=(l+r)/2;
if(y<=mid) return find(v*2,l,mid,x,y,z);
else
if(x>mid) return find(v*2+1,mid+1,r,x,y,z);
else
return find(v*2,l,mid,x,mid,z)+find(v*2+1,mid+1,r,mid+1,y,z);
}
long long finds(int v,int l,int r,int x,int y,int z)
{
if(x>y) return 0;
if(l==x && y==r)
{
return si[v][z];
}
int mid=(l+r)/2;
if(y<=mid) return finds(v*2,l,mid,x,y,z);
else
if(x>mid) return finds(v*2+1,mid+1,r,x,y,z);
else
return finds(v*2,l,mid,x,mid,z)+finds(v*2+1,mid+1,r,mid+1,y,z);
}
long long get(long long t)
{
long long xx=finds(1,1,N,1,t-1,0)*t-find(1,1,N,1,t-1,0);
if(xx && ans/xx<=c) return maxlongint*maxlongint;
long long sum=xx*c;
if(b<=a)
{
sum+=(find(1,1,N,t+1,N,1)-finds(1,1,N,t+1,N,1)*t)*b;
}
else
{
long long zy=finds(1,1,N,1,t-1,1)*t-find(1,1,N,1,t-1,1),be=find(1,1,N,t+1,N,1)-finds(1,1,N,t+1,N,1)*t;
if(zy>=be) sum+=be*a;
else
{
sum+=zy*a+b*(be-zy);
}
}
return sum;
}
int main()
{
scanf("%lld%lld%lld%d%d",&a,&b,&c,&n,&m);
for(int i=1,x;i<=n;i++)
{
scanf("%d",&x);
put(1,1,N,x,0);
}
for(int i=1,x;i<=m;i++)
{
scanf("%d",&x);
put(1,1,N,x,1);
}
for(int i=1;i<=N;i++) ans=min(ans,get(i));
printf("%lld",ans);
}

【GDOI2018模拟7.9】期末考试的更多相关文章

  1. python期末考试复习

    期末考试复习 补修的python跟着大一一起学,考试肯定不会出难,于是就敲了一些代码,把他们放到博客上,来记录一下 代码都是一段一段的,且python代码不是很多,所以我都写到了一个文件里,作为练习 ...

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

    一.期末考试成绩班级前几名 胡晓波(90).杨彦婷(88).宋卓卿(85).唐指朝(84).陈建兵(83).宋沛颖(82).王昊越(81).白睿(80).韩沅伯(80).王艺楷(80).张漠林(80) ...

  3. 复旦大学2014--2015学年第二学期(14级)高等代数II期末考试第八大题解答

    八.(本题10分)  设 $A,B$ 为 $n$ 阶半正定实对称阵, 求证: $AB$ 可对角化. 分析  证明分成两个步骤: 第一步, 将 $A,B$ 中的某一个简化为合同标准形来考虑问题, 这是矩 ...

  4. 复旦大学2015--2016学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前几名 胡晓波(93).宋沛颖(92).张舒帆(91).姚人天(90).曾奕博(90).杨彦婷(90).白睿(88).唐指朝(87).谢灵尧(87).蔡雪(87) 二.总成绩计算方 ...

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

    一.期末考试成绩班级前几名 钱列(100).王华(92).李笑尘(92).金羽佳(91).李卓凡(91).包振航(91).董麒麟(90).张钧瑞(90).陆毕晨(90).刘杰(90).黄成晗(90). ...

  6. 复旦大学2014--2015学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前几名 金羽佳(92).包振航(91).陈品翰(91).孙浩然(90).李卓凡(85).张钧瑞(84).郭昱君(84).董麒麟(84).张诚纯(84).叶瑜(84) 二.总成绩计算 ...

  7. nyoj 757 期末考试【优先队列+贪心】

    期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣 ...

  8. 复旦大学2016--2017学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前十名 宁盛臻(100).朱民哲(92).徐钰伦(86).范凌虎(85).沈伊南(84).何陶然(84).丁知愚(83).焦思邈(83).董瀚泽(82).钱信(81) 二.总成绩计 ...

  9. 2012 B 中国近现代史纲要》课程期末考试试卷

    湖南人文科技学院2013年3月公共课 2011级<中国近现代史纲要>课程期末考试试卷B 考核方式:(开卷)                                    考试时量: ...

  10. 2012 A 《中国近现代史纲要》课程期末考试试卷

    湖南人文科技学院2012—2013学年第1学期公共课 2011级<中国近现代史纲要>课程期末考试试卷 考核方式:(开卷)                                   ...

随机推荐

  1. python3.6调用c语言动态编译文件 c语言编译可执行文件和动态编译等

    1.c的代码 dfunc.c #include<stdio.h> int dgfunc(int n) { ){ ; }else{ )+dgfunc(n-); } } 2.动态编译 cmd ...

  2. 【Linux开发】linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟

    linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  3. 【linux杂谈】遇到REMOTE HOST IDENTIFICATION HAS CHANGED怎么办?

    今日遇到如下问题: 警告的大概意思就是,主机密钥发生变更,并提示安全风险(可能存在中间人攻击) 但是事实是,这是因为我重装系统之后遇到的问题.重装系统后,指纹当然会发生变化了...在Xshell实验中 ...

  4. SolidWorks学习笔记6抽壳,加强筋,扫描,放样

    抽壳 概念:移除一个或者多个面,然后将其余的模型外表面向内或者向外偏移相等或者不等的距离 针对不同面设置不同厚度 方向参考 有实体的一侧是内测, 没有实体的一侧是外侧 顺序 先圆角再抽壳 加强筋. 点 ...

  5. java.sql.SQLException: Access denied for user 'root'@'10.10.7.180' (using password: YES)

    1.刚开始连接数据库提示是: java.sql.SQLException: Access denied for user 'root'@'10.10.7.180' (using password: N ...

  6. [c++] SYSTEM_INFO

    SYSTEM_INFO,Win32 API函数GetSystemInfo所使用的结构体. 说明 SYSTEM_INFO结构体包含了当前计算机的信息.这个信息包括计算机的体系结构.中央处理器的类型.系统 ...

  7. CF387B 【George and Round】

    暴力还真的出奇迹了这题窝将读入的两个数组都先排个序,然后再枚举一遍就过了: 目前题解最短的代码QwQ.这里是代码 #include<bits/stdc++.h>using namespac ...

  8. Codeforces 1221B. Knights

    传送门 看到棋盘上跳马,发现如果把棋盘黑白染色,那么每次移动都是从白点到黑点,从黑点到白点 所以直接根据黑白染色判断每个位置的马的颜色即可 #include<iostream> #incl ...

  9. 使用mybatis插件自动生成代码以及问题处理

    1.pom.xml中加入依赖插件 <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybatis ...

  10. java中this总结(转载请注明出处)

    1:this在构造方法中:this可以进行构造方法中的相互调用,this(参数): 2:this调用方法中,代表调用该方法的对象的地址,例如下面的代码比较 package thisTest; publ ...