[洛谷 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< ...
随机推荐
- SpringBoot25 gradle安装、利用gradle创建SrpingBoot项目
1 gradle安装 技巧01:gradle依赖JDK或者JRE,而且版本至少时1.7 1.1 下载安装包 到gradle官网下载安装包[PS: 也可以利用命令的方式安装,本案例是利用安装包的方式] ...
- hp警告Creating default object from empty value 问题的解决方法
hp警告Creating default object from empty value 问题的解决方法 解决方法是找到报错的位置然后看哪个变量是没有初始化而直接使用的,将这个变量先实例化一个空类.如 ...
- ROS naviagtion analysis: costmap_2d--CostmapLayer
博客转自:https://blog.csdn.net/u013158492/article/details/50493220 这个类是为ObstacleLayer StaticLayer voxelL ...
- python文件处理os模块
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...
- Laravel 测试教程
参考链接:https://laravel-news.com/seeding-data-testing 迁移文件 修改 database/migrations/2014_10_12_000000_cre ...
- Ubuntu 16.04 安装jdk
Ubuntu 16.04 安装jdk 准备工作 安装版本:jdk-8u91-linux-x64.tar.gz 官方下载 创建目录作为JDK的安装目录,这里选择安装位置为:/usr/java/ sudo ...
- HTML & CSS设计与构建网站 ([美]达科特) PDF原版
HTML & CSS 设计与构建网站采用有别于许多传统编程书籍的新颖编排方式,将使您收到事半功倍的学习效果.每一页都在短小精悍的示例代码的引导下,简明直观.直截了当地阐述一个新主题. < ...
- angular 输出属性
import { Component, OnInit, EventEmitter, Output } from '@angular/core'; @Component({ selector: 'app ...
- 从头开始学eShopOnContainers——开发环境要求
一.简介 eShopOnContainers是一个简化版的基于.NET Core和Docker等技术开发的面向微服务架构的参考应用,是一个简化版的在线商城/电子商务应用,其包含基于浏览器的Web应用. ...
- SQL 全角半角转换-(摘抄)
/****** SQL转换全角/半角函数 开始******/ CREATE FUNCTION ConvertWordAngle ( @str NVARCHAR(4000), --要转换的字符串 @fl ...