【模拟】AtCoder2160 Manhattan Compass

2023-05-16

分析:

模拟实现题。。。把坐标轴转一下然后暴力求就行了。
转了一下坐标轴,问题就变成以p为中心,与新的坐标轴平行的,边长为2*d的正方形上的点能够与p相连。
这里写图片描述

方便起见,把答案分成两部分求
这里写图片描述
然后可以分别考虑这两部分,分别扫描这两部分即可。
只不过有个技巧,如果使用并查集储存能到达哪些点,那么每次连的边应该从与上个点最后一个连的点开始即可。(没必要重复连边,因为那部分已经连上同一个点,所以只需要连一条就能把所有点连在一起)。这样一来,连边的次数均摊下来就是2*N次了。
这里写图片描述

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#include<set>
#define SF scanf
#define PF printf
#define MAXN 200010
using namespace std;
typedef long long ll;
int n,st;
ll d;
int fa[MAXN];
ll siz[MAXN];
ll cnt[MAXN];
int get_fa(int x){
    if(fa[x]==0)
        return x;
    fa[x]=get_fa(fa[x]);
    return fa[x];   
}
vector<pair<ll,int> >mp;
struct node{
    ll x,y;
    int id;
    bool operator < (const node &a) const {
        if(x!=a.x)
            return x<a.x;
        return y<a.y;
    }
}p[MAXN];
ll dist(int x,int y){
    return abs(p[x].x-p[y].x)+abs(p[x].y-p[y].y);
}
void merge(int x,int y){
    //PF("{%d %d}\n",x,y);
    x=get_fa(x);
    y=get_fa(y);
    if(x!=y)
        fa[x]=y;
}
void solve(ll now){
    mp.clear();
    int las=1;
    vector<pair<ll,int> >::iterator  lasx;
    bool flag=0;
    for(int i=1;i<=n;i++){
        if(p[i].x!=p[i-1].x){
            mp.clear();
            flag=1;
        }
        while(p[i].x-p[las].x>d&&las<=n)
            las++;
        while(p[i].x-p[las].x==d&&las<=n){
            mp.push_back(make_pair(p[las].y,p[las].id));
            las++;
        }
        vector<pair<ll,int> >::iterator it=lower_bound(mp.begin(),mp.end(),make_pair(p[i].y-d+now,0));
        if(flag){
            flag=0;
            lasx=mp.begin();
        }
        lasx=max(lasx,it);
        if(it==mp.end()||it->first >p[i].y+d-now)
            continue;
        for(;lasx!=mp.end()&&lasx->first <= p[i].y+d-now;lasx++){
            int x=lasx->second;
            int y=p[i].id;
            if(x>y)
                swap(x,y);
            merge(x,y);
        }
        cnt[p[i].id]+=(lasx-it);
        //PF("[%d %d %d]\n",p[i].id,cnt[p[i].id],lasx-it);
        if(lasx!=it)
            lasx--;
    }
}
int a,b;
int main(){
    SF("%d%d%d",&n,&a,&b);
    for(int i=1;i<=n;i++){
        SF("%d%d",&p[i].x,&p[i].y);
        p[i].id=i;
    }
    d=dist(a,b);
    for(int i=1;i<=n;i++){
        ll x=p[i].x;
        ll y=p[i].y;
        p[i].x=x-y;
        p[i].y=x+y;
    }
    sort(p+1,p+1+n);
    solve(0);
    for(int i=1;i<=n;i++)
        swap(p[i].x,p[i].y);
    sort(p+1,p+1+n);
    //PF("----------\n");
    solve(1);
    for(int i=1;i<=n;i++)
        siz[get_fa(i)]+=cnt[i];
    PF("%lld",siz[get_fa(a)]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【模拟】AtCoder2160 Manhattan Compass 的相关文章

  • xrdp 老版本返回上一次登录以及error - problem connecting

    连接服务器失败总结以下几种处理方式 xff1a 首先确定不是网络问题 xff0c ping ip地址 说明服务器端的网络没有问题 xff0c 通常linux开机默认监听22 3350 3389几个端口 22端口是用来连接ssh xff0c
  • C51编程23-应用篇(HC 06蓝牙模块)

    现在的手机 平板 xff0c 笔记本电脑都会自带蓝牙 本文将会介绍51单片机使用HC 06 蓝牙模块实现手机与笔记本电脑的通讯 HC 06 模块 购买HC 06模块后需要检测蓝牙模块是否是好的 xff0c 使用串口线与HC 06 模块连接起
  • BiliBili自动签到

    前情提要 emmm怎么突然会出这个教程呢 xff0c 因为俺要白嫖TX xff0c 如下图 xff1a 这是腾讯云函数公众号的一个搭建环境送礼品的活动 xff0c 截止日期 xff1a 10 9 这活动多亏群友分享 xff0c 不然俺也不知
  • RHEL8-配置IP地址

    前导 本文主要讲解如何重启RHEL 8或者CentOS 8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错 xff0c 当我们安装好RHEL 8或者 CentOS 8 xff0c 重启启动网络时 xff0c 会出现以下报错
  • redhat-8-0重置root密码

    前导 如果你忘记了RHEL 8系统中的root密码 xff0c 那就得重置root密码 xff0c 以下为在Grub启动菜单中在RHEL 8上进行手动密码恢复 引导 重启RHEL 8系统 将系统重启 xff0c 在看到grub菜单后 xff
  • Debian10使用本地ISO搭建APT源

    前言 这是个坑 xff01 是个大坑 xff01 如果在配置debian10本地源的时候 xff0c 直接使用apt cdrom add命令创建本地源后 xff0c 在安装软件的时候会有很大几率找不到软件包的位置然后报错 报错 E The

随机推荐

  • Debian10.x创建Raid5

    技术简介 RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中 RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中 xff0c 而是存储到除自身以外的其他每一块硬盘设备上 xff0c 这样的好处是其中任何
  • Debian10.x创建NFS

    技术简介 NFS xff08 网络文件系统 xff09 服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上 xff0c 从而使得本地主机 xff08 Linux客户端 xff09 基于TCP IP协议 xff0c 像使用本地
  • Windows下 gcc编译环境的构建(Sublime + Mingw)

    1 起源 Windows 7下VC 6 0装起来很困难 xff0c 不得不装了个Visual Studio 2010 Express 但感觉比庞大 xff0c 并且在程序运行的最后不会暂停 2 计划采用Sublime加Mingw构建一个gc
  • Linux下安装xrdp

    Linux下安装xrdp 使用rdp协议访问远程Linux桌面 一般情况下 xff0c 如果需要登陆远程Linux系统 xff0c 我们会使用ssh telnet来完成 xff0c 如果需要登陆到远程Linux系统的桌面环境 xff0c 我
  • bootstrap模态对话框宽度设置

    39 addFormbox 39 modal css width 39 auto 39 39 margin left 39 function return this width 2
  • Debian10.x简易配置DHCP服务器

    环境 Client 网卡1 系统 xff1a debian10 Server xff1a 三网卡IP 10 10 100 254 IP 172 16 100 254 IP xff1a 192 16 100 254 实施步骤 安装 apt i
  • haproxy各个指标的打印报告解析

    1 使用这个命令就可以获取haproxy所有的数据 span class hljs keyword echo span span class hljs string 34 show stat 34 span socat span class
  • CentOS7使用firewalld打开关闭防火墙与端口火墙与端口

    CentOS7使用firewalld打开关闭防火墙与端口火墙与端口 启动 xff1a systemctl start firewalld 关闭 xff1a systemctl stop firewalld 查看状态 xff1a system
  • poj 1752 Advertisement (区间差分约束+最长路 输出可行解)

    Advertisement Time Limit 1000MS Memory Limit 10000KTotal Submissions 919 Accepted 331 Special Judge Description The Depa
  • OSI 七层模型详解

    大家好 xff0c 我是蛋蛋 3T 43 技术学习视频资源 xff0c 500 43 技术电子书 xff0c 大量高效工具及网站 xff0c 私信回复 资源 即可免费获取 OSI xff08 Open System Interconnect
  • WebService的简单示例

    今天 xff0c 看到需求需要WebService进行通信 xff0c 所以我就先看看WebService是怎样的一个流程 xff0c 这里做个简单实例 首先我创建了两个工程 xff0c 一个为服务端 xff0c 另一个为客户端 part1
  • 今日头条2018校园招聘后端开发工程师 (第二批) 编程题 - 字母交换

    题目描述 xff1a 编码题 字符串S由小写字母构成 xff0c 长度为n 定义一种操作 xff0c 每次都可以挑选字符串中任意的两个相邻字母进行交换 询问在至多交换m次之后 xff0c 字符串中最多有多少个连续的位置上的字母相同 xff1
  • php 报错:A non-numeric value encountered

    意思是 39 遇到了非数值异常 39 xff0c 可能是你的代码里字符串拼接习惯性的将 39 39 写成了 39 43 39 所导致
  • linux系统变为只读,提示Read-only file system的解决办法

    mount o rw remount
  • 修改Debian登录窗口背景图片

    仅记录以便日后使用 xff1a 执行gresource export sh xff0c 将资源文件备份到 HOME shell theme目录将导出的 HOME shell theme theme中的所有文件 xff0c 保存到gnome
  • 【MySQL】Navicat修改数据库名称

    假设 xff1a 有一个数据库 xff0c 名称为A xff0c 需要修改为B 在Navicat中不可以按F2修改数据库的名称 xff0c 我们必须新建一个库 xff0c 命名为B 下面4种方式都可以实现目标 如果数据库中有远程表和权限设置
  • CityScapes数据集介绍

    CityScapes Cityperson数据集 xff0c 在16年CVPR上被提出 xff0c 是张姗姗一波人在CityScapes数据集上进行标注得到的行人检测数据集 做行人检测的应该都不陌生 在Replusion Loss和NMS
  • ARM学习(18) Jink Ozone调试总结

    笔者来聊聊Jink Ozone调试 1 Ozone加载选择elf或者bin Ozone调试的时候可以设置PC的位置 xff0c 主要有上面两种 从ELF读取PC位置 xff0c 调试时直接设置PC的初始位置从向量表中读取pc的初始值 xff
  • mac iCloud 关闭后 桌面文件不见了

    输入 user后回车 进入用户文件 打开iCloud Drive
  • 【模拟】AtCoder2160 Manhattan Compass

    分析 模拟实现题 把坐标轴转一下然后暴力求就行了 转了一下坐标轴 xff0c 问题就变成以p为中心 xff0c 与新的坐标轴平行的 xff0c 边长为2 d的正方形上的点能够与p相连 方便起见 xff0c 把答案分成两部分求 然后可以分别考