[2016北京集训测试赛3]masodik-[凸包]
Description

Soluton
666这道题竟然用凸包。。。
维护r和c的下凸壳。哪个斜率大走哪个。
证明:我们先不考虑其他的,只考虑两条路,如下图:

设图的长度为x,宽度为y。如果我们要走上面的路径,则r1*y+c1*x>=r2*y+c2*x。
移项得$\frac{(r1-r2)}{x}\geq \frac{(c2-c1)}{y}$。
显然对于只有两条路的情况,证明成立。
感性理解一下,最终的最优路径必然是由无数点的最优路径组成,如S->T1->T2->T3->T4。。。->T
所以,我就厚着脸皮认为它成立啦。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,m;
int r[],c[],qr[],topr=,qc[],topc=;
int tpr,tpc;
long long ans;
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
{
scanf("%d",&r[i]);
while (topr>&&1ll*(r[i]-r[qr[topr]])*(qr[topr]-qr[topr-])<1ll*(r[qr[topr]]-r[qr[topr-]])*(i-qr[topr])) topr--;
qr[++topr]=i;
}
for (int i=;i<=m;i++)
{
scanf("%d",&c[i]);
while (topc>&&1ll*(c[i]-c[qc[topc]])*(qc[topc]-qc[topc-])<1ll*(c[qc[topc]]-c[qc[topc-]])*(i-qc[topc])) topc--;
qc[++topc]=i;
}
tpr=tpc=;
while (tpr<topr&&tpc<topc)
{
if (1ll*(r[qr[tpr+]]-r[qr[tpr]])*(qc[tpc+]-qc[tpc])<=1ll*(c[qc[tpc+]]-c[qc[tpc]])*(qr[tpr+]-qr[tpr]))
ans+=1ll*(qr[tpr+]-qr[tpr])*c[qc[tpc]],tpr++;
else ans+=1ll*(qc[tpc+]-qc[tpc])*r[qr[tpr]],tpc++;
}
if (tpr==topr) ans+=1ll*(m-qc[tpc])*r[n];else ans+=1ll*(n-qr[tpr])*c[m];
cout<<ans;
}
[2016北京集训测试赛3]masodik-[凸包]的更多相关文章
- 2016北京集训测试赛(九)Problem C: 狂飙突进的幻想乡
Solution 我们发现, 对于一条路径来说, 花费总时间为\(ap + q\), 其中\(p\)和\(q\)为定值. 对于每个点, 我们有多条路径可以到达, 因此对于每个区间中的\(a\)我们可以 ...
- 【2016北京集训测试赛(十)】 Azelso (期望DP)
Time Limit: 1000 ms Memory Limit: 256 MB Description 题解 状态表示: 这题的状态表示有点难想...... 设$f_i$表示第$i$个事件经过之 ...
- 【2016北京集训测试赛(二)】 thr (树形DP)
Description 题解 (这可是一道很早就碰到的练习题然后我不会做不想做,没想到在Contest碰到欲哭无泪......) 题目大意是寻找三点对的个数,使得其中的三个点两两距离都为d. 问题在于 ...
- 【2016北京集训测试赛(八)】 crash的数列 (思考题)
Description 题解 题目说这是一个具有神奇特性的数列!这句话是非常有用的因为我们发现,如果套着这个数列的定义再从原数列引出一个新数列,它居然还是一样的...... 于是我们就想到了能不能用多 ...
- 【2016北京集训测试赛(十六)】 River (最大流)
Description Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...
- 【2016北京集训测试赛】river
HINT 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. [吐槽] 嗯..看到这题的想法的话..先想到了每个点的度为2,然后就有点不知所措了 隐隐约约想到了网络流,但并没 ...
- 【2016北京集训测试赛】azelso
[吐槽] 首先当然是要orzyww啦 以及orzyxq奇妙顺推很强qwq 嗯..怎么说呢虽然说之前零零散散做了一些概d的题目但是总感觉好像并没有弄得比较明白啊..(我的妈果然蒟蒻) 这题的话可以说是难 ...
- [2016北京集训测试赛17]crash的游戏-[组合数+斯特林数+拉格朗日插值]
Description Solution 核心思想是把组合数当成一个奇怪的多项式,然后拉格朗日插值..:哦对了,还要用到第二类斯特林数(就是把若干个球放到若干个盒子)的一个公式: $x^{n}=\su ...
- [2016北京集训测试赛15]statement-[线段树+拆环]
Description Solution 由于题目要求,将a[i]->b[i](边权为i)后所得的图应该是由森林和环套树组合而成. 假如是树形结构,所有的t[i]就直接在线段树t[i]点的dfs ...
随机推荐
- 原生js模仿jq fadeIn fadeOut效果 兼容IE低版本
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- jwplayer视频--不兼容IE8
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- flask开启debug模式的两种方法、加载配置文件的两种方法、URL传参的四种方法
from flask import Flask app = Flask(__name__) # app.config.update(DEBUG=True)#开启debug模式 #加载配置文件方法一 # ...
- Odoo工作流
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9281264.html 一:工作流 工作流是与业务流程相关联的模型,可用于跟踪工序的动态演变过程. 工作流.活动 ...
- Odoo中Application与modules的区别
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9278681.html 一:Application(应用) application一般是针对大功能的模块,如提供 ...
- 【vue】父向子组件传参、子组件向父传参
1.父向子组件传参 App.vue为父,引入componetA组件之后,则可以在App.vue中使用标签(注意驼峰写法要改成componet-a写法,因为html对大小写不敏感,componenta与 ...
- UIWebView 获取网页标题
- (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *urlString = webView.request.URL.absolu ...
- 设置eclipse默认编码格式
Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window->Prefere ...
- mysql修改数据表自增步长
可以修改系统变量 auto_increment_increment mysql> SHOW VARIABLES LIKE 'auto_inc%'; +---------------------- ...
- [java之设计模式]策略模式
策略模式(strategy pattern) 定义>> 将一系列的算法封装到一些列的类里面,并且可以相互替换 作用>> 将算法的变化独立于客户端,将算法的指责和算法的行为分开, ...