2017.9.10 土地购买 思考记录
2017-09-10 10:34
176 查看
、、这个题结论还是比较好猜的、
就是把土地按长为第一关键字,宽为第二关键字,这样就可以省去许多包含的土地
剩下的就是长度递增、宽递减的土地:
剩下的就是斜率优化了,但wa了好几遍,,这是因为:
1、数学不好,长宽单调性看成相同的了
2、没开long long
3、斜率精度误差
4、<=和>=反了、
所以:
1、除法比较时一定要注意是不是有误差
2、准确理解斜率优化的意义
3、尝试找规律和归类法分析问题、
码:
就是把土地按长为第一关键字,宽为第二关键字,这样就可以省去许多包含的土地
剩下的就是长度递增、宽递减的土地:
剩下的就是斜率优化了,但wa了好几遍,,这是因为:
1、数学不好,长宽单调性看成相同的了
2、没开long long
3、斜率精度误差
4、<=和>=反了、
所以:
1、除法比较时一定要注意是不是有误差
2、准确理解斜率优化的意义
3、尝试找规律和归类法分析问题、
码:
#include<iostream> #include<cstdio> #include<algorithm> #define ll long long using namespace std; ll n,i,cnt,x[100005],y[100005],f[100005]; struct la { ll c,k; }a[100005],b[100005]; bool cmp(la a,la b) {if(a.c!=b.c) return a.c<b.c; return a.k<b.k; } int main() { scanf("%lld",&n); for(i=1;i<=n;i++) { scanf("%lld%lld",&a[i].c,&a[i].k); } sort(a+1,a+1+n,cmp); for(i=n;i>=1;i--) { if(a[i].k>b[cnt].k) b[++cnt]=a[i]; } for(i=1;i<=cnt;i++) a[i]=b[i]; n=cnt; int z1=1,z2=1; x[1]=a[1].c; y[1]=0; for(i=1;i<=n;i++) { while(z1<z2&&double(y[z1]-y[z1+1])/double(x[z1]-x[z1+1])>=-a[i].k)++z1; ll lx,ly; ly=y[z1]+x[z1]*a[i].k; f[i]=ly; lx=a[i+1].c; while(z2-z1>=1&&double(y[z2]-ly)/double(x[z2]-lx)>=double(y[z2-1]-ly)/double(x[z2-1]-lx))--z2; ++z2; y[z2]=ly; x[z2]=lx; } printf("%lld",f ); }
相关文章推荐
- 2017.9.10 连续攻击游戏 思考记录
- 2017.9.10 ricehub 思考记录
- 【OI做题记录】【BZOJ】【Usaco2008 Mar】土地购买
- 2017.9.10 序列操作 思考记录
- [生而为人-思考] 沈定刚教授座谈会感悟记录
- 启思录(启发、思考、记录)— 毕业这80天
- [bzoj1597][USACO2008]土地购买(DP斜率优化/四边形优化)
- 2017.3.18 糖果 思考记录
- 2017.9.14 棘手的操作 思考记录
- bzoj 1597 土地购买(斜率优化dp)
- bzoj1597: [Usaco2008 Mar]土地购买
- 2017.9.18 数颜色 思考记录
- 关于MYSQL 和INNODB的逻辑关系图。最好的理解是一点点动手做,观察,记录,思考。
- 2017.7.18 树上距离=k 思考记录
- bzoj1597 [Usaco2008 Mar]土地购买(斜率)
- jzoj 1354. 【2011.12.24普及模拟】土地购买
- 2017.4.5 假期的宿舍 思考记录
- 2017.9.28 CF #R2 B 思考记录
- 2017.7.27 排列perm 思考记录
- 2017.10.10 杀人游戏 思考记录