码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-09-05 13:35:55      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:优秀   sed   而且   mil   杂题   图片   image   show   暴力枚举   

好久没有水过杂题了!

今天lsc终于刚过了三道考试题来水杂题了!

期末考试

技术图片

 

首先一看还是一脸mb(这是正常现象,毕竟我不像一些大神可以一眼出正解)然后我就被颓了标签,知道是三分单峰函数,但是自己实在是太弱了,所以并不会使用三分来水题,就只能使用暴力来做;

我们知道最后的恶心度(题里的不愉快度)是只和最后在那天出成绩有关,所以暴力枚举在哪天出成绩,然后使用前缀和就可以做到枚举1000000就可以出答案,其实就是取min就可以了!

如果A<B,那么显然使用第一种方法更优秀,而且我们可以O(1)算

然后就是要前缀和维护可以推迟的天数的和,最后再判一下就行了,注意long long 和 res>ans就跳出;

具体的看代码:

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 const int N=100005;
 5 ll ans=1ll<<62,A,B,C,s1,s2,s3,s4,res=0;
 6 int n,m,t[N],b[N];
 7 int main()
 8 {
 9     scanf("%lld%lld%lld%d%d",&A,&B,&C,&n,&m);
10     for(int i=1,x;i<=n;i++)scanf("%d",&x),t[x]++;
11     for(int i=1,x;i<=m;i++)scanf("%d",&x),b[x]++,s3+=x;
12     for(int T=1;T<=100000;T++)
13     {
14         res+=s1*C;//恶心程度!
15         s1+=t[T];//到这一天期望出分数的个数!其实是等待已经到达极点的人数!
16         if(res>=ans)break;
17         s4+=s2;//小于i天的可以退迟的总天数!
18         s3-=(m-s2);//还没有出分的数目!
19         s2+=b[T];//在这一天之前出分的数目!
20         ll r;
21         if(B<=A)r=s3*B;//显然使用第二种方法好使
22         else if(s3<=s4)r=s3*A;//只有没有出分的小于出分的情况才可以使用一进行搞
23         else r=s4*A+(s3-s4)*B;//不然的话就混合搞!
24         ans=min(ans,res+r);
25     }
26     printf("%lld\n",ans);
27 }
View Code

 

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

标签:优秀   sed   而且   mil   杂题   图片   image   show   暴力枚举   

原文地址:https://www.cnblogs.com/hzoi-lsc/p/11465130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!