补题链接: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题解)的更多相关文章

  1. AtCoder Regular Contest 121 D - 1 or 2

    题目链接:点我点我 Problem Statement Snuke has a blackboard and NN candies. The tastiness of the ii-th candy ...

  2. 2018.09.02 Atcoder Regular Contest 102简要题解

    比赛传送门 T1 Triangular Relationship 分析之后发现有两种情况: 1. n为奇数,那么所有数都是k的倍数. 2. n为偶数,那么所有数都是k/2的倍数. 然后就可以愉快A题了 ...

  3. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  4. AtCoder Regular Contest 096

    AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...

  5. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  6. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  7. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

  8. AtCoder Regular Contest 094

    AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...

  9. AtCoder Regular Contest 095

    AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...

  10. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

随机推荐

  1. .net下功能强大的HTML解析库HtmlAgilityPack,数据抓取必备

    HtmlAgilityPack是一个.NET平台下的HTML解析库,它可以将HTML文本转换为DOM文档对象,方便我们对HTML文本进行操作和分析.HtmlAgilityPack支持XPath语法,可 ...

  2. Flask 运用Xterm实现交互终端

    Xterm是一个基于X Window System的终端仿真器(Terminal Emulator).Xterm最初由MIT开发,它允许用户在X Window环境下运行文本终端程序.Xterm提供了一 ...

  3. [NOI online2022普及B] 数学游戏

    题目描述 Kri 喜欢玩数字游戏. 一天,他在草稿纸上写下了 \(t\) 对正整数 \((x,y)\),并对于每一对正整数计算出了 \(z=x\times y\times\gcd(x,y)\). 可是 ...

  4. 12 HTTP的实体数据

    目录 数据类型和编码 HTTP协议为什么要关心 body MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型 HTTP 常用数据类型 MIM ...

  5. 【论文阅读】HTTP 流量和恶意 URL 的异常检测

    Part 1关于论文 基本信息 题目:HTTP 流量和恶意 URL 的异常检测 源码:sec2vec源代码 摘要 在本文中,我们将展示如何利用自然语言处理(NLP)中已知 的方法来检测 HTTP 请求 ...

  6. keycloak~对接login-status-iframe页面判断用户状态变更

    上次我们说了,keycloak的login-status-iframe页面的作用,并解决了跨域情况下,iframe与主页面数据传递的方法,这一次,我们主要分析login-status-iframe.h ...

  7. 数字孪生技术助力GIS行业实现视效升级

    在当今数字化时代,数字孪生技术正逐渐成为各行各业的一项核心技术,而地理信息系统(GIS)行业也不例外.数字孪生和GIS的结合,为地理空间数据的采集.管理.分析和可视化提供了全新的可能性,使GIS行业得 ...

  8. spring是否线程安全

    spring 管理的bean默认是单例的,可通过 scope 属性设置scope="singleton" 默认是单例,可修改为scope="prototype" ...

  9. 真的最后一次了——城院GO导航大作业迭代最终版

    真的!!!最后一次了!不骗人! 1.小程序的体验版二维码: 想体验的可以申请一下体验权限: 2.小程序目前功能介绍 1.首先进入是index页面:点击第一个是学校简介页面,第二个能直接跳到主程序的地图 ...

  10. el-table 设置合并行或列时,显示错乱问题

    1. 需求效果图: 2. 接口数据格式: 点击查看代码 const list = [ { contractNo: "CAI-20220801001", contractItem: ...