[洛谷 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< ...
随机推荐
- 661. Image Smoother色阶中和器
[抄题]: Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoo ...
- IDEA小技巧:添加代码快捷方式
非常怀恋eclipse的的代码快捷方式tryc,今天给IDEA也添加了一个
- 运行maven build报错No goals have been specified for this build.
运行maven报错: [ERROR] No goals have been specified for this build. You must specify a valid lifecycle p ...
- Java 享元设计
- Hadoop深入学习:MapTask详解
转自:http://flyingdutchman.iteye.com/blog/1878775#bc2337280 Hadoop深入学习:MapTask详解 博客分类: Hadoop MapTask执 ...
- Android Tablayout属性介绍
1.添加依赖 compile 'com.android.support:design:26.0.0-alpha1' 2.属性 改变选中字体的颜色app:tabSelectedTextColor=&qu ...
- C# - dynamic 特性
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性. 比如,即使 ...
- struts2中错误提示:There is no Action mapped for namespace / and action name
当在struts2中运行时出现如上所述错误时: 1.在src目录下创建struts.xml一定要注意拼写 2.struts.xml文件中引入和extend是否正确 3.在web.xml 中<we ...
- c# 实现点击下载功能
转自百度知道 private void DownLoad(string strName, string strPath) { string fileName = strName;//客户端保存的文件名 ...
- 小度wifi在window server2008R2系统下创建不了
小度wifi在window server2008R2系统下创建的时候会一直显示正在创建,然后又消失的情况.这是因为win server 2008下默认的无线lan服务没开启 解决方法: 在“服务管理器 ...