【BZOJ4868】期末考试 [三分][贪心]

期末考试

Time Limit: 20 Sec  Memory Limit: 512 MB
[Submit][Status][Discuss]

Description

  

Input

  

Output

  

Sample Input

  100 100 2
  4 5
  5 1 2 3
  1 1 2 3 3

Sample Output

  6

HINT

  

Solution

  首先,由于学生需要知道所有的成绩,这意味着即使只有一个成绩不知道,代价也是要算的,那么显然答案只和所有成绩都发出的时间有关。
  显然,如果我们知道了所有成绩都发出的时间,必然是可以算出最小的不愉快度的,对于一个最后日期x,我们运用贪心得到不愉快度:
    1.由于A策略有负面影响,B策略没有,所有在A<B的情况下才有可能用A
    2.如果我们需要用A,显然能用的次数是:所有天数在x前面的 (x-天数),剩下的用B补满。
  然后,我们大胆猜测可以三分!这样我们就能AC啦。

Code

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<cmath>
 8 using namespace std;
 9 typedef long long s64;
10
11 const int ONE = 1000001;
12 const s64 INF = 1e18;
13
14 int A,B,C,n,m;
15 int t[ONE],b[ONE],MaxN;
16 s64 Ans = INF;
17 int Now;
18
19 inline s64 get()
20 {
21         s64 res=1,Q=1;  char c;
22         while( (c=getchar())<48 || c>57)
23         if(c==‘-‘)Q=-1;
24         if(Q) res=c-48;
25         while((c=getchar())>=48 && c<=57)
26         res=res*10+c-48;
27         return res*Q;
28 }
29
30 s64 Judge(s64 x)
31 {
32         s64 res = 0, num1 = 0, num2 = 0;
33         for(int i=1;i<=n;i++) res += max(x-t[i],0LL) * C;
34         for(int i=1;i<=m;i++) num1 += max(x-b[i],0LL), num2 += max(b[i]-x,0LL);
35         if(A > B) res += num2 * B;
36         else
37         {
38             res += min(num1,num2) * A;
39             res += max((num2-num1) * B,0LL);
40         }
41
42         Ans = min(Ans,res);
43         return res;
44 }
45
46 int main()
47 {
48         A=get();    B=get();    C=get();
49         n=get();    m=get();
50         for(int i=1;i<=n;i++) t[i]=get(), MaxN=max(MaxN,t[i]);
51         for(int i=1;i<=m;i++) b[i]=get();
52
53         if(C >= 1e16)
54         {
55             for(int i=1;i<=n;i++) MaxN=min(MaxN,t[i]);
56             printf("%lld",Judge(MaxN));
57         }
58
59         s64 a,b,pass;
60         s64 l = 0, r = MaxN+1;
61         while(l < r-2)
62         {
63             pass = (r-l)/3;
64             a = l+pass; b = r-pass;
65             if(Judge(a) < Judge(b)) r = b;
66             else l = a;
67         }
68
69         printf("%lld",Ans);
70
71 }
72 

时间: 2024-10-15 06:55:04

【BZOJ4868】期末考试 [三分][贪心]的相关文章

[luogu] P3745 [六省联考2017]期末考试 (贪心)

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

[BZOJ 4868][SHOI&amp;SXOI2017]期末考试(贪心)

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

BZOJ 4868 [Shoi2017]期末考试 ——三分 枚举

考场上xjb三分过掉了. 然后$sdfzyhx$.$silvernebula$ $O(n)$虐掉了. 我还是太菜了 #include <cstdio> #include <cmath> #include <queue> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=

【BZOJ4868】期末考试(整数三分)

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

三分 BZOJ4868 [Sxoi2017] 期末考试

4868: [Sxoi2017]期末考试 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 605  Solved: 270[Submit][Status][Discuss] Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程 公布成绩,每等待一天就会产生C不愉快度.对

bzoj4868 [Shoi2017]期末考试

4868: [Shoi2017]期末考试 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 961  Solved: 437[Submit][Status][Discuss] Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程 公布成绩,每等待一天就会产生C不愉快度.对

BZOJ4868:[SHOI2017]期末考试——题解

http://www.lydsy.com/JudgeOnline/problem.php?id=4868 题目复制于洛谷:https://www.luogu.org/problemnew/show/P3745#sub 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布. 第i位同学希望在第ti天或之前得知所有课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生C不愉快度.对于第i门课程,按照原本的计划,会在

期末考试(正解:三分单峰函数 me:暴力水过)

好久没有水过杂题了! 今天lsc终于刚过了三道考试题来水杂题了! 期末考试 首先一看还是一脸mb(这是正常现象,毕竟我不像一些大神可以一眼出正解)然后我就被颓了标签,知道是三分单峰函数,但是自己实在是太弱了,所以并不会使用三分来水题,就只能使用暴力来做; 我们知道最后的恶心度(题里的不愉快度)是只和最后在那天出成绩有关,所以暴力枚举在哪天出成绩,然后使用前缀和就可以做到枚举1000000就可以出答案,其实就是取min就可以了! 如果A<B,那么显然使用第一种方法更优秀,而且我们可以O(1)算 然

【bzoj4868】[Shoi2017]期末考试 前缀和

题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生C不愉快度.对于第i门课程,按照原本的计划,会在第bi天公布成绩.有如下两种操作可以调整公布成绩的时间:1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟一天,公布课程Y成绩的时间提前一天:每次操作产生A不愉快度.2.增加一部分老师