CH BR8(小学生放假了-clock()/CLOCKS_PER_SEC-斜率优化常错集锦)
小学生放假了
总时限 | 26s | 内存限制 | 256MB |
---|---|---|---|
出题人 | zsyzzsoft | 提交情况 | 16/150 |
初始分值 | 1500 | 锁定情况 |
背景
我们能见到的最可怕的事情,莫过于小学生放假了!
描述
小学生要放假了!MT学校一共有N个小学生,学校旁边的ET小卖部希望在小学生放假之前做好坑蒙小学生的准备!ET小卖部一共有M个不同的商品,每个商品的价格可以定位任意非负整数,每个商品的数量是无限的。每个小学生有Ci RMB,每人只能购买一个商品,他们希望他们购买的商品尽量贵。小卖部应该如何设定每个商品的价格,使得他们坑蒙小学生的收入尽可能多呢?请输出最多的收入。
输入格式
第一行两个用空格隔开的整数N,M。
紧接着N行,第i+1行一个整数,表示Ci(见题目描述)
输出格式
一个整数,表示最多的收入。
样例输入
5 3
1
3
5
7
9
样例输出
22
样例解释
三个商品的价格分别设置为3RMB,7RMB和9RMB。
第一个小学生由于没有足够的RMB,不购买任何商品;
第二个小学生和第三个小学生只能购买3RMB的商品;
第四个小学生可以购买7RMB的商品;
第五个小学生可以购买9RMB的商品。
3 + 3 + 7 + 9 = 22,所以这种方案获得了22RMB的收入。
可以证明,没有更优的方案。
数据范围与约定
对于100%的数据,1 <= Ci <= 109,1 <= N <= 10000,1 <= M <= 2000。
单点时间限制2s。
来源
原创
斜率优化易错点。。。
1.不等式*(-1),2边都要变号。
2.注意叉积乘爆,切忌bool强转 (bool) t >0
优先级高
3.初值P(0,a[1],0)
4.eps乱用
5.a.y-b.y
a.x=b.x的情况 *inf 注意+,-
否则long double 可能出现真的正负无穷 然后T得惨惨的,还查不出错。。。
能出正解的其实,上面。。。↑
写了一天各种错。。无语了。。后天考试。。考文化。。。坐等爆0。。。。
顺便说一下clock()的用法
clock()/CLOCKS_PER_SEC 返回程序运行开始到执行的时间(单位:s)
卡时间专用。。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (10000+10)
#define MAXM (2000+10)
#define eps 1e-13
#define Read(x) { \
while (!isdigit(c=getchar())); \
x=c-48; \
while (isdigit(c=getchar())) x=x*10+c-48; \
}
long long mul(long long a,long long b){return (a*b)%F;}
long long add(long long a,long long b){return (a+b)%F;}
long long sub(long long a,long long b){return (a-b+(a-b)/F*F+F)%F;}
typedef long long ll;
int n,m;
char c;
ll a[MAXN];
ll f[MAXM][MAXN]={0},T[MAXN]={0},h[MAXN];
struct P
{
int i;
long double x,y;
P(int _i,ll _x,ll _y):i(_i),x(_x),y(_y){}
P(ll _x,ll _y):x(_x),y(_y){}
P(){}
friend long double kk(P a,P b){if (abs(a.x-b.x)<eps) return (b.y-a.y)*INF;return (b.y-a.y)/(b.x-a.x); }
}st[MAXN];
struct V
{
long double x,y;
V(ll _x,ll _y):x(_x),y(_y){}
V(){}
V(P a,P b):x(b.x-a.x),y(b.y-a.y){}
//friend bool operator*(V a,V b){return ((long double)a.x/a.y-(long double)b.x/b.y)>eps;}
friend long double operator*(V a,V b){/*cout<<a.x*b.y-a.y*b.x<<endl;*/return a.x*b.y-a.y*b.x; }
};
int main()
{
// freopen("input","r",stdin);
Read(n) Read(m)
For(i,n)
Read(a[i])
sort(a+1,a+1+n);
For(i,n-1) h[i]=(ll)i*a[i+1];
// For(j,n) f[0][j]=0;
For(i,m)
{
For(j,n-1) T[j]=f[i-1][j]-h[j];
int head=1,tail=1;
st[1]=P(0,a[1],0);
For(j,n)
{
// cout<<head<<' '<<tail<<endl;
while (head^tail&&kk(st[head],st[head+1])>=-j) head++;
// cout<<kk(st[head],st[head+1])<<' '<<-j<<endl;
int k=st[head].i;
f[i][j]=f[i-1][k]+(j-k)*a[k+1];
// cout<<i<<' '<<j<<':'<<k<<' '<<f[i][j]<<' '<<f[i-1][k]<<' '<<(j-k)*a[k+1]<<endl;
// if (j<n)
// {
P A=P(j,a[j+1],T[j]);
while (head^tail&&V(st[tail-1],st[tail])*V(st[tail],A)>=0) tail--;
st[++tail]=A;
// }
}
}
//ll ans=0;
/*
For(i,m)
{
For(j,n) ans=max(ans,f[i][j]);//,cout<<f[i][j]<<' ';cout<<endl;
}*/
// cout<<ans<<endl;
printf("%lld\n",f[m][n]);
//For (j,n) cout<<f[m][j]<<endl;
// cout<<clock()/CLOCKS_PER_SEC<<endl;
return 0;
}
CH BR8(小学生放假了-clock()/CLOCKS_PER_SEC-斜率优化常错集锦)的更多相关文章
- CH BR8(小学生在上课-逆元和互质数一一对应关系)
小学生在上课 总时限 11s 内存限制 256MB 出题人 jzc 提交情况 66/277 初始分值 600 锁定情况 背景 小学生在学校上数学课…… 描述 数学课上,小学生刚学会了乘除法.老师问了他 ...
- CF1179D Fedor Runs for President [DP,斜率优化]
Codeforces 思路 考虑把连的那两个点中间的链提出来,那么就会变成一条链,链上的每个点挂着一棵子树的形式. 设那些子树的大小为\(S_1,S2,\cdots\),那么新加的简单路径个数就是 \ ...
- 【BZOJ-1096】仓库建设 斜率优化DP
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3719 Solved: 1633[Submit][Stat ...
- 【BZOJ-4518】征途 DP + 斜率优化
4518: [Sdoi2016]征途 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 230 Solved: 156[Submit][Status][ ...
- 【BZOJ-3675】序列分割 DP + 斜率优化
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1420 Solved: 583[Submit][Statu ...
- 【BZOJ-3437】小P的牧场 DP + 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 705 Solved: 404[Submit][Status][Discuss ...
- 【BZOJ-3156】防御准备 DP + 斜率优化
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 951 Solved: 446[Submit][Status][Discuss] ...
- 【BZOJ-1010】玩具装箱toy DP + 斜率优化
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 8432 Solved: 3338[Submit][St ...
- 【BZOJ-1597】土地购买 DP + 斜率优化
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2931 Solved: 1091[Submit] ...
随机推荐
- ImageView设置点击效果没有用?ImageView src的图片大小改变不了?
ImageView设置点击效果没有用? 解决 1.ImageView xml里面必须clickable 和longClickable为true <ImageView android:layout ...
- WebStorm修改默认快捷键
打开 "File" -> "Setting" -> "keymap",即可修改.
- 传输层-TCP
UDP协议提供了端到端之间的通讯,应用程序只需要在系统中监听一个端口,便可以进行网络通讯.随着计算机网络的发展,计算机网络所承载的业务越来越多,有些业务数据的传输需要具备可靠性,譬如我们在进行在线聊天 ...
- 使用WebFrom来模拟一些MVC的MODEL与View的数据交互功能
MVC中有一点非常闪瞎人眼的功能就是,可以根据Model与View视图来直接将页面也数据模型进行绑定,那么我们在想客户端发送页面时不需要进行各种控件赋值,不需要操心怎么渲染,当客户提交表单给服务器时也 ...
- poj1182 并查集
题目连接:http://poj.org/problem?id=1182 基础并查集,需要维护与根节点关系,解析见代码: /* poj 1182 并查集 思路分析:让你分析这些话里面多少假的 只需要用 ...
- javascript 关于闭包的知识点
javascript 关于闭包的认识 概念:闭包(closure)是函数对象与变量作用域链在某种形式上的关联,是一种对变量的获取机制. 所以要大致搞清三个东西:函数对象(function object ...
- PE文件结构整理
一直想做一个PE结构的总结,只是学的时候有很多东西就没搞懂,加上时间一长,很多知识也早忘了,也就一直没完成.这几天从头看了下,好不容易理清楚了,整理一下,以免又忘了 pe文件框架结构,图片贴过来太模糊 ...
- 导入表 IMPORT_DESCRIPTOR
typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null i ...
- 转:单片机C语言中的data,idata,xdata,pdata,code
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
- Altium Design 中差分走线的设置
1.在原理图中,将要设置的差分对的网络名称的前缀取相同的名字,在前缀后面加后缀分别为_N 和_P,并且加上差分对指示.具体操作如下:2.在原理图界面下,单击 Place>>Directiv ...