汕头市队赛 SRM14 T1 计算几何瞎暴力
计算几何瞎暴力
(easy.pas/c/cpp) 128MB 1s
在平面上,给定起点和终点,有一面墙(看作线段)不能穿过,问从起点走到终点的最短路程。
输入格式
输入一行,包含8个用空格分隔的整数xS,yS,xT,yT,x1,y1,x2,y2,依次表示起点(xS,yS),终点(xT,yT),线段(x1,y1)-(x2,y2)。
输出格式
输出一个整数,表示答案四舍五入到整数后的值,保证答案精确值的小数点后一位不是4或5。
样例输入
1 1 2 2 1 2 2 1
样例输出
2
样例解释
走折线(1,1)-(1,2)-(2,2)或(1,1)-(2,1)-(2,2)路程最短。
数据范围
对30%的数据,xS<=xT<=x1<=x2
对所有的数据,输入的整数在范围1..1000内,保证起点和终点不在线段上
————————————————————————————————————
这道题判一下线段是否和起点终点连线想交就好了
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=2e4+,inf=0x3f3f3f3f;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,l,ans;
int sum[M],w[M],f[][M],mx;
int q[M],ql,qr,k;
int F(int x){return f[k-][x]-sum[x];}
int main(){
freopen("hard.in","r",stdin);
freopen("hard.out","w",stdout);
n=read(); m=read(); l=read();
for(int i=l;i<n+l;++i) w[i]=read();
n=n+*l-;
for(int i=;i<=n;++i) sum[i]=sum[i-]+w[i];
for(int i=;i<l;++i) f[][i]=-inf;
for(int i=l;i<=n;++i) f[][i]=sum[i]-sum[i-l];
for(k=;k<=m;++k){
ql=,qr=;
mx=-inf;
for(int i=;i<l;++i) f[k][i]=-inf;
for(int i=l;i<=n;++i){
while(ql<=qr&&q[ql]<=i-l) ++ql;
while(ql<=qr&&F(q[qr])<=F(i-)) --qr;
q[++qr]=i-;
mx=max(mx,f[k-][i-l]);
f[k][i]=max(mx+sum[i]-sum[i-l],F(q[ql])+sum[i]);
}
}
ans=;
for(int i=;i<=m;++i)
for(int j=l;j<=n;++j) ans=max(ans,f[i][j]);
printf("%d\n",ans);
return ;
}
汕头市队赛 SRM14 T1 计算几何瞎暴力的更多相关文章
- 汕头市队赛SRM14 T3覆盖
我们可以考虑两种情况 区间之间不相重叠 和 重叠 f[i][j]表示以当前最后一个区间以 i 结尾 并且选了 j 个区间 不相重叠的话 只要选 1-i-w 的max再加上 包含i在内的前四个数的和 相 ...
- 汕头市队赛 SRM14 T2 最长上升子序列
最长上升子序列 (tree.pas/c/cpp) 128MB 1s 有一个长度为n的序列a[i],其中1到n的整数各自在a[i]中出现恰好一次. 现在已知另一个等长的序列f[i],表示a[i]中以第i ...
- 汕头市队赛 SRM1X T1
木之本樱 背景 “西瓜是可以种在树上的!”——木之本樱 描述 空地上,一排排的西瓜树拔地而起. 魔法世界里,空地是无限大的.所有的树排成了n条直线,每条直线也是向左右两端无限延伸的. 由于自己姓木(之 ...
- 汕头市队赛 SRM10 T1 贪心只能过样例
贪心只能过样例 SRM 10 描述 给出n个数a[i](1<=a[i]<=n),问最多能把这些数分成几组,使得每个数a[i]所在的组至少有a[i]个数 输入格式 第一行一个整数n,接下来n ...
- 汕头市队赛 SRM10 T1模拟只会猜题意
模拟只会猜题意 SRM 10 描述 有一本n个单词的词典,求按下列方法能造出的不相同的词汇数目. 1.词典中的单词是一个词. 2.能分为两部分的,其中前一部分是一个词典词或者其非空前缀,后一部分是一 ...
- 汕头市队赛 C KMP codeforces B. Image Preview
汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...
- LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力
二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...
- loj517 计算几何瞎暴力
在序列上维护4个操作 1.在序列的尾端添加x 2.输出Al~Ar的和 3.将所有数异或x 4.将序列从小到大排序 第一眼看上去是Splay于是头铁硬刚了一发 后来发现splay没法异或 去百度“维护异 ...
- 汕头市队赛SRM 20 T1魔法弹
T1 背景 “主角光环已经不能忍啦!” 被最强控制AP博丽灵梦虐了很长一段时间之后,众人决定联合反抗. 魂魄妖梦:“野怪好像被抢光了?” 十六夜咲夜:“没事,我们人多.” 然后当然是以失败告终了. 八 ...
随机推荐
- LINUX操作系统知识:进程与线程详解
当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程. Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行.我们大家常用的单CPU ...
- Python的输入和输出问题详解
输出用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print('hello, world') pr ...
- Can't connect to local MySQL server through socket '/tmp/mysql.sock'
今天在连接mysql的时候出现了上面的错误, 很明显原因找不到/socket 文件 查了半天才发现原来是mysql没有开启 service mysqld start 开启之后在/tmp/目录下回自 ...
- TP-常见错误1
1.无法加载模块 FILE: D:\wamp64\www\www.test_shop.com\ThinkPHP\Library\Think\Dispatcher.class.php LINE: 178 ...
- 5.Mongodb聚合
聚合 aggregate 聚合(aggregate)主要用于计算数据,类似sql中的sum().avg() 语法 db.集合名称.aggregate([{管道:{表达式}}]) 1.管道 管道在Uni ...
- 3611: [Heoi2014]大工程
3611: [Heoi2014]大工程 链接 分析: 树形dp+虚树. 首先建立虚树,在虚树上dp. dp:sum[i]为i的子树中所有询问点之间的和.siz[i]为i的子树中有多少询问点,mn[i] ...
- 调用startActivityForResult后直接调用onActivityResult
人员都知道,可以经由过程应用 startActivityForResult() 和 onActivityResult() 办法来传递或接管参数. 然而在"轻听"项目中,还没比及被调 ...
- 【转】Git命令解说
3.12. Git branch 3.12.1. 总述 当第一次执行git init时,系统就会创建一个名为“master”的分支. 而其它分支则通过手工创建. 下面列举一些常见的分支策略: ...
- 剑指Offer - 九度1366 - 栈的压入、弹出序列
剑指Offer - 九度1366 - 栈的压入.弹出序列2014-02-05 20:41 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所 ...
- 【Lowest Common Ancestor of a Binary Search Tree】cpp
题目: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in th ...