[洛谷 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< ...
随机推荐
- 刷题向》关于搜索+tarjan的奇怪组合题 BZOJ1194 (normal+)
关于这道题,其实看懂了的话还是比较好写的,只是题目实在又臭又长,没有让人读下去的勇气. 给出题目翻译: 给你S张图, 每张图有M个点,其中M个点中有N个是特殊单位,会给出. 每个点又有0.1两条边指向 ...
- PHP内核介绍及扩展开发指南—Extensions 的编写
Extensions 的编写 理解了这些运行机制以后,本章着手介绍Extensions 的编写,但凡写程序的人都知道hello world,那好,就从hello world开始. 1.1Hello W ...
- 数字图像处理实验(15):PROJECT 06-02,Pseudo-Color Image Processing 标签: 图像处理MATLAB 2017-05-27 20:53
实验要求: 上面的实验要求中Objective(实验目的)部分是错误的. 然而在我拿到的大纲中就是这么写的,所以请忽视那部分,其余部分是没有问题的. 本实验是使用伪彩色强调突出我们感兴趣的灰度范围,在 ...
- jquery select 左右移动
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- 8.python 系统批量运维管理器之pexpect模块
小插曲 前几节讲了paramiko模块,但是pexpect模块的功能几乎跟paramiko一样,先来分析一下: 1.各自介绍 pexpect是一个通过启动子程序,使用正则表达式对程序输出做出特定响应, ...
- PHP中循环结构之foreach循环语句
在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标.取下标. (1)只取值,不取下标 <?php foreach (数组 as 值){ //执行的任务 } ?> ...
- 关于pycharm字体大小的调整
我们平常编写pyhton 可以用sublime eclipse 但是eclipse在后期需要安装很多插件,这很是麻烦,为了避免这种麻烦,我们采用pycharm来编写,但是刚装上的该软件 不建议同学们进 ...
- URAL 1355. Bald Spot Revisited(数论)
题目链接 题意 : 一个学生梦到自己在一条有很多酒吧的街上散步.他可以在每个酒吧喝一杯酒.所有的酒吧有一个正整数编号,这个人可以从n号酒吧走到编号能整除n的酒吧.现在他要从a号酒吧走到b号,请问最多能 ...
- 中介者(Mediator)模式
中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互 了解<迪米特法则>的朋友就知 ...
- 微服务linux启动停止脚本
# 停止脚本#!/bin/bash #其他服务停止脚步可以通过修改APP_MAIN参数即可 APP_MAIN=com.idoipo.infras.eureka.center.Application t ...