AtCoder Regular Contest 121 (AB题解)
补题链接:Here
A - 2nd Greatest Distance
二维坐标图中有 \(n\) 个房子,现在规定两房子距离定义为: \(max(|x_i−x_j|,|y_i−y_j|)\)
求第二大的距离值
【解法一】对 \(x,y\) 进行排序寻找
#define f first
#define s second
const int N = 2e5 + 10;
pair<int, int>x[N], y[N];
int n;
void solve() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> x[i].f >> y[i].f, x[i].s = y[i].s = i;
sort(x + 1, x + 1 + n);
sort(y + 1, y + 1 + n);
int t = (x[n].s == y[n].s && x[1].s == y[1].s ? 0 : min(x[n].f - x[1].f, y[n].f - y[1].f));
cout << max(x[n].f - x[2].f, max(x[n - 1].f - x[1].f, max(y[n].f - y[2].f, max(y[n - 1].f - y[1].f, t))));
}
【解法二】官方题解
我们没有时间计算 \(\frac{N(N - 1)}{2}\) 个距离中的每一个,并在 \(O(N^2log N)\) 时间内对它们进行排序。
这里要更多地利用距离的属性。 考虑找出以下问题:
- 两所房子 x 坐标的最大差异 两所房子 y 坐标的最大差异
- 两所房子 x 坐标的第二大差异 两所房子 y 坐标的第二大差异
我们可以很容易地 找出它们中的前两个,x 坐标的第二大差异是以下之一:
- 第二大 x 坐标减去最小的 x 坐标 最大的 x 坐标减去第二小的 x 坐标 我们可以找到 y 坐标的第二大差异类似。
现在,我们可以只打印四个差异中的第二大值吗? 不幸的是,如果同一对房屋在其中出现两次,则可能是错误的。
为了解决这个问题,让我们列出出现在这四对中的所有房屋,并找出列表中每对房屋之间的距离。 由于列表最多包含 8 个房子,一个有效的实现将在 \(O (N)\) 时间内完成。
#define f first
#define s second
const int N = 2e5 + 10;
pair<int, int>x[N], y[N];
int n;
void solve() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> x[i].f >> y[i].f, x[i].s = y[i].s = i;
sort(x + 1, x + 1 + n);
sort(y + 1, y + 1 + n);
int t = (x[n].s == y[n].s && x[1].s == y[1].s ? 0 : min(x[n].f - x[1].f, y[n].f - y[1].f));
cout << max(x[n].f - x[2].f, max(x[n - 1].f - x[1].f, max(y[n].f - y[2].f, max(y[n - 1].f - y[1].f, t))));
}
B - RGB Matching
给狗狗按 R,G,B分组排序,如果是 3偶 则可以直接输出 \(0\) ,对于 1偶2奇
R偶数,考虑GB的最小值在另一组的大小关系G偶数,考虑RB的最小值在另一组的大小关系B偶数,考虑RG的最小值在另一组的大小关系
#include<bits/stdc++.h>
#define int long long
using namespace std;
int const N = 233333;
int n;
vector<int>dog[3];
int sub(vector<int>a, vector<int>b) {
int ans = 1e18;
for (int i = 0; i < a.size(); i++) {
int p = lower_bound(b.begin(), b.end(), a[i]) - b.begin();
if (p < b.size())ans = min(ans, abs(a[i] - b[p]));
if (p > 0)ans = min(ans, abs(a[i] - b[p - 1]));
}
return ans;
}
signed main() {
ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= 2 * n; i++) {
int x; char c;
cin >> x >> c;
switch (c) {
case'R': dog[0].push_back(x); break;
case'G': dog[1].push_back(x); break;
case'B': dog[2].push_back(x);break;
}
}
for (int i = 0; i < 3; i++)sort(dog[i].begin(), dog[i].end());
int k0 = dog[0].size() % 2, k1 = dog[1].size() % 2, k2 = dog[2].size() % 2;
if (!k0 && !k1 && !k2) {cout << 0; return 0;}
int s01 = sub(dog[0], dog[1]), s02 = sub(dog[0], dog[2]), s12 = sub(dog[1], dog[2]);
if (!k0)cout << min(s12, s01 + s02);
if (!k1)cout << min(s02, s01 + s12);
if (!k2)cout << min(s01, s02 + s12);
return 0;
}
AtCoder Regular Contest 121 (AB题解)的更多相关文章
- AtCoder Regular Contest 121 D - 1 or 2
题目链接:点我点我 Problem Statement Snuke has a blackboard and NN candies. The tastiness of the ii-th candy ...
- 2018.09.02 Atcoder Regular Contest 102简要题解
比赛传送门 T1 Triangular Relationship 分析之后发现有两种情况: 1. n为奇数,那么所有数都是k的倍数. 2. n为偶数,那么所有数都是k/2的倍数. 然后就可以愉快A题了 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
随机推荐
- Netty源码学习6——netty编码解码器&粘包半包问题的解决
系列文章目录和关于我 零丶引入 经过<Netty源码学习4--服务端是处理新连接的&netty的reactor模式和<Netty源码学习5--服务端是如何读取数据的>的学习, ...
- 一文带你掌握C语言的分支结构
C语言分支结构详解 1. if 语句 在本篇博客文章中,我们将深入探讨C语言中的if语句及其相关用法.if语句是一种用于条件判断的分支语句,它允许我们根据条件的真假来执行不同的代码块. 1.1 if ...
- 如何优雅而不损失性能的实现SpringCloud Gateway网关参数加解密方案
背景 为了增强产品安全性,计划对应用网关进行改造,主要是出入参经过网关时需要进行加解密操作,保证请求数据在网络传输过程中不会泄露或篡改. 考虑到密钥的安全性,每个用户登录都会签发独立的密钥对.同时摒弃 ...
- 量化交易的相对强弱(RSI )指标计算及策略
顾名思义,相对强弱指数 (RSI) 指标告诉我们资产的相对强弱.换句话说,RSI 告诉我们股票相对于自身的表现(或不表现).RSI 被视为一种强大的技术指标,可用于分析市场,并且是交易者武器库的重要组 ...
- MySQL InnoDB加锁规则分析
1. 基础知识回顾 1.索引的有序性,索引本身就是有序的 2.InnoDB中间隙锁的唯一目的是防止其他事务插入间隙.间隙锁可以共存.一个事务取得的间隙锁并不会阻止另一个事务取得同一间隙上的间隙锁.共 ...
- bash shell笔记整理——less命令
less命令的作用 less和cat.more最大的差别在于不会一次性加载整个文件,速度比较快!另外less具备翻页功能,可以向上/向下翻页! 语法 less [选项] [文件名] *选项* *使用说 ...
- 安装Office
安装Office 第一步 访问: https://otp.landian.vip/zh-cn/ 点击立即下载 选择: 第二步 打开下载好的zip,解压,启动程序 第三步 选择部署(在这里可以看到电脑已 ...
- 在IDEA启动多个Spring Boot工程实例
在IDEA上点击Application右边的下三角 ,弹出选项后,点击Edit Configuration 选中需要多实例启动的应用,将默认的Single instance only(单实例)的钩去掉 ...
- 解决 IDEA 报错ERROR:JAVA: 无效的源发行版: 11
解决 IDEA 报错ERROR:JAVA: 无效的源发行版: 11 原因 一般都是创建工程的时候 一路next 默认选择了 Java Version 11, 而本地的jdk版本是 8 解决 File ...
- Fiddler使用 抓取手机数据包及中文乱码解决方案
https://blog.csdn.net/zyb2017/article/details/79260086