[洛谷 P4612][COCI 2011-2012#7] Setnja
TM :setnja (1S256M)
一个人要散步去会见他的 N 个朋友(按给定的顺序会见)。我们可以理解成他们都住在一个
很大的网格内,每个朋友住其中的一个单元格,所有人每一步都可以走到相邻的八个格子中。
每个朋友最多可以走 P 步与他相见,每个人的 P 值不一定相同。他可以决定起点和终点。
问他会见完所有朋友的最少步数。
输入:
第一行,一个正整数 N (2 ≤ N ≤ 200 000),表示朋友个数。
接下来,N 行,描述 N 个朋友,x, y, and P (0 ≤ x, y, P ≤ 200 000),x,y 表示朋友最初的坐
标。朋友给的顺序就是他要依次会见的顺序。
输出:
一个数,表示他要走的最少的步数。
Scoring
30%的数据,所有数字最多 20.
另有 30%的数据,所有朋友的 P 值小于 10.
样例:
Input
3
3 10 2
8 4 2
2 5 2
output
4
input
4
3 3 5
7 11 5
20 8 10
30 18 3
output
19
样例 1,从 (4, 8),出发会见第一个朋友。走两步在(6,6)会见第二个朋友,走两步到(4,5)会见第三个朋友。
代码 :
#include <cstdio> #include <algorithm> #include <cmath> using namespace std; ; ; struct size_ { int x1, x2, y1, y2; size_ () {} size_ (int x1, int x2, int y1, int y2) : x1(x1), x2(x2), y1(y1), y2(y2) {} }c[N]; size_ cmp(size_ a, size_ b) { size_ w(max(a.x1, b.x1), min(a.x2, b.x2), max(a.y1, b.y1), min(a.y2, b.y2)); if( w.x1 > w.x2 || w.y1 > w.y2) return size_ (-inf, -inf, -inf, -inf); return w; } int n; int main() { freopen("setnja.in", "r", stdin); freopen("setnja.out", "w", stdout); scanf("%d", &n); , x, y, p; i <= n; i ++) scanf("%d%d%d", &x, &y, &p), c[i] = size_(x-p, x+p, y-p, y+p); size_ w = c[]; long long ans = 0ll; // 开 long long ,不然会炸 ; i <= n; i ++) { size_ t = cmp(w, c[i]); if( t.x1 != -inf) { w = t; continue ;} int x = max(max(w.x1 - c[i].x2, c[i].x1 - w.x2), max(w.y1 - c[i].y2, c[i].y1 - w.y2)); // printf("%d %d<< \n", x, i); // de bug w = cmp(size_(w.x1-x, w.x2+x, w.y1-x, w.y2+x), c[i]); ans += (long long)x; } printf("%lld", ans); ; }
时间较短,博主考试炸了要改题,为什么这么做后2天找时间补上
开始填坑......
惯例 设 struct---- C[ ] { x1, x2(横坐标 x1 < x2), y1, y2(纵坐标 y1 < y2) } ( 表示那个 基♂友最多愿意活动的范围)
因为他必须按顺序访问节点,所以贪心去找就 ojbk......
首先
我们考虑样例1(我觉得结合样例更容易说清)
图中 A B C 表示 这位死宅的基♂友的初始位置, 周围的矩形表示他的基♂友愿意活动的范围......
因为我们可以选定初始位置,所以起点应该在A矩形内的任意位置(当前), 如果在矩形外的话一定不是最优解(很容易YY到),那么从A矩形到B矩形的最短距离便是从A访问B的最短距离
可以看到,最短距离便是FP,(因为可以斜着走,FQ不够长,到不了);
今天先填到这......
前面在说什么不太记得清了,能看就看,重新整理下
每个人能到达的范围可以用一个矩形来表示(显然), 第一次的位置一定是在第一个人活动的区域(如果在区域外那么他将先走到区域内在走到第二个人那里去,显然不是最优);
然后(1 ) 如果第二个点的范围与第一个点有交集,那么初始可行位置一定是在这个交集里面(YY下就好了);
(2 ) 如果第二个点的范围与第一个点无交集,那么需要移动的距离一定是第一个矩形与第二个矩形之间的最短距离,那么将第一个矩形扩大最短距离个单位,与第二个矩形的交集便是最优解可能的位置,此时 ans 加上之前求出的最短距离。
然后我们得出的最优解的范围与之后的点进行同样的操作,贪心即可得出最优解......
至于为什么......看图......
第一次我们得出1与2的最短距离是2,则最优范围从ABCD变道EM,然后再由EM去扩展得到2与3 的最优范围。(还不理解就自己画画图);
然后历时2天的坑就填完了......
[洛谷 P4612][COCI 2011-2012#7] Setnja的更多相关文章
- [SinGuLaRiTy] COCI 2011~2012 #2
[SinGuLaRiTy-1008] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 测试题目 对于所有的题目:Time Limit:1s ...
- 洛谷P4312 [COCI 2009] OTOCI / 极地旅行社(link-cut-tree)
题目描述 不久之前,Mirko建立了一个旅行社,名叫“极地之梦”.这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走在各个冰岛之间.Mi ...
- [洛谷P5190][COCI 2010] PROGRAM
题目大意:给你$k(k\leqslant10^6)$个数,$f(x)$表示$x$的约数在$k$个数中出现的次数,在这任何数都是$0$的约数.$m(m\leqslant10^6)$次询问,每次给出$l, ...
- [洛谷P4312][COCI 2009] OTOCI / 极地旅行社
题目大意:有$n(n\leqslant3\times10^4)$个点,每个点有点权,$m(m\leqslant3\times10^5)$个操作,操作分三种: $bridge\;x\;y:$询问节点$x ...
- 洛谷 P2260 [清华集训2012]模积和 || bzoj2956
https://www.lydsy.com/JudgeOnline/problem.php?id=2956 https://www.luogu.org/problemnew/show/P2260 暴力 ...
- 洛谷 P4149 [ IOI 2011 ] Race —— 点分治
题目:https://www.luogu.org/problemnew/show/P4149 仍然是点分治: 不过因为是取 min ,所以不能用容斥,那么子树之间就必须分开算,记录桶时注意这个: 每次 ...
- 洛谷 P1312 [ NOIP 2011 ] Mayan游戏 —— 搜索+模拟
题目:https://www.luogu.org/problemnew/show/P1312 还是不擅长这种题,所以参考了一下TJ: 其实也很好搜,按字典序,先搜右移,再搜左移: 不交换相同颜色的两个 ...
- 洛谷 P3515 [ POI 2011 ] Lightning Conductor —— 决策单调性DP
题目:https://www.luogu.org/problemnew/show/P3515 决策单调性... 参考TJ:https://www.cnblogs.com/CQzhangyu/p/725 ...
- 洛谷P2260 [清华集训2012]模积和(容斥+数论分块)
题意 https://www.luogu.com.cn/problem/P2260 思路 具体思路见下图: 注意这个模数不是质数,不能用快速幂来求逆元,要用扩展gcd. 代码 #include< ...
随机推荐
- 【HDU4970】Killing Monsters
题意 数轴上有n个点,有m座炮塔,每个炮塔有一个攻击范围和伤害,有k个怪物,给出他们的初始位置和血量,问最后有多少怪物能活着到达n点.n<=100000 分析 对于某个怪物,什么情况下它可以活着 ...
- 【bzoj1017】[JSOI2008]魔兽地图DotR
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1658 Solved: 755[Submit][S ...
- XHProf安装使用笔记
编译安装 获取源代码包root@sourcjoy>wget http://pecl.php.net/get/xhprof-0.9.2.tgz解压root@sourcjoy>tar zxf ...
- M(必备),R(需求),C(条件),O(可选)
M:must 必备 R:request 需求 C:condition 条件 O:option 可选 AFL:application file locator 应用文件定位器 PKI:公钥索引 IPK: ...
- (转)那天有个小孩教我WCF[一][1/3]
原文地址:http://www.cnblogs.com/AaronYang/p/2950931.html 既然是小孩系列,当然要有一点基础才能快速掌握,归纳,总结的一个系列,哈哈 前言: 第一篇嘛,不 ...
- 我用Django搭网站(3)-表单RSA加密
之前开发项目时因为种种原因一直使用明文提交,表单直接明文提交非常不安全,只要稍加操作就能轻易获取用户的信息.在众里寻他千百度之后决定使用RSA加密方式,简单可靠. 项目准备 一.安装PyCrypto库 ...
- wp面试题
初级工程师 解释什么是依赖属性,它和以前的属性有什么不同?为什么在WPF会使用它? 什么是样式什么是模板 绑定(Binding )的基础用法 解释这几个类的作用及关系: Visual, UIEleme ...
- I-team 博客全文检索 Elasticsearch 实战
一直觉得博客缺点东西,最近还是发现了,当博客慢慢多起来的时候想要找一篇之前写的博客很是麻烦,于是作为后端开发的楼主觉得自己动手丰衣足食,也就有了这次博客全文检索功能Elasticsearch实战,这里 ...
- 神经网络中的感受野(Receptive Field)
在机器视觉领域的深度神经网络中有一个概念叫做感受野,用来表示网络内部的不同位置的神经元对原图像的感受范围的大小.神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和po ...
- 初学python - 常见函数使用
*** 读入两个整数 a,b=eval(input()) ***range()函数 创建列表 :range( 1, 11,2) - 产生 [1,11) 相差为2数,2为步长 ***print()函数 ...