首页 > 其他分享 >AT_abc218_d 题解

AT_abc218_d 题解

时间:2023-07-24 14:34:25浏览次数:47  
标签:个点 int 题解 复杂度 abc218 long 枚举 mp

洛谷链接&Atcoder

本篇题解为此题较简单做法较少码量,并且码风优良,请放心阅读。

题目简述

给定一个平面内的 \(N\) 个点的坐标,求这 \(N\) 个点中选 \(4\) 个点可构成正方形的方案数

:构成的正方形的边需平行于 \(x\) 轴或 \(y\) 轴。

例如下图就不符合要求,则不考虑这种情况:

思路

此题基本纯思维题,算法考的不多。

一看数据范围,\(4 \le N \le 2000\)?既然数据范围这么小,那么 \(O(N^2)\) 的时间复杂度是能过的,但如果暴力枚举 \(4\) 个点的话时间复杂度是 \(O(N^4)\),时间复杂度爆炸啊。

所以还是需要一点小优化的,本蒟蒻一开始只想到了枚举 \(3\) 个点,接着判断另一个点是否存在,但这个想法的时间复杂度是 \(O(N^3)\),还是会超时

那么我们沿袭这个思想就可以想到,直接 \(N^2\) 枚举 \(2\) 的点,接着判断另外两个点是否存在即可,但这枚举的两个点需为两个对角的点,这里我们枚举左上和右下两个点。

接着只需要解决如何判断另外两个点是否存在的问题即可,很容易想到用 map 容器去储存点是否存在的信息。

即可推出判断的语句:\(mp_{x_i,y_i}\) 且 \(mp_{x_j,y_j}\) 且 \(mp_{x_i,y_j}\) 且 \(mp_{x_j,y_i}\) 且 \(x_i<x_j\) 且 \(y_i<y_j\)。

map 容器的初始化直接在输入时初始化即可。

经过以上分析,即可得出代码:

#include<iostream>
#include<map>
using namespace std;

int n, x[2005], y[2005];
long long ans = 0; // 开 long long 好习惯
map<int, map<int, bool> > mp; // 不要写成 >>,中间要有空格

int main() {
    cin >> n; // 输入
    for(int i = 1; i <= n; i ++) {
        cin >> x[i] >> y[i]; // 输入
        mp[x[i]][y[i]] = true; // 初始化处理
    }
    for(int i = 1; i <= n; i ++) {
        for(int j = 1; j <= n; j ++) {
            if(i == j) continue; // 特判 i = j 的情况
            if(mp[x[i]][y[i]] && mp[x[j]][y[j]] && mp[x[i]][y[j]] && mp[x[j]][y[i]] && x[i] < x[j] && y[i] < y[j]) ans ++; // 满足要求 ans++
        }
    }
    cout << ans << endl; // 输出,记得换行
    return 0;
}

提交记录

\[\text{The End!!} \]

标签:个点,int,题解,复杂度,abc218,long,枚举,mp
From: https://www.cnblogs.com/So-noSlack/p/17577141.html

相关文章

  • AT_abc215_d 题解
    洛谷链接&Atcoder链接本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。题目简述给定\(N\),\(M\)及含有\(N\)个整数的序列\(A\)。求\(1\simM\)中与所有\(a_i\)均互质的整数及个数。思路首先说一下最开始的想法。直接暴力枚举\(1\simM\)的数,再分......
  • 仪酷LabVIEW AI视觉工具包及开放神经网络交互工具包常见问题解答
    前言哈喽,各位朋友,好久不见~之前给大家分享了基于LabVIEW开发的AI视觉工具包及开放神经网络交互工具包,不少朋友私信说在安装和使用过程中会遇到一些问题,今天我们就集中回复一下大家问到最多的问题。如果大家在使用过程中还有其他问题,可以补充到评论区,我们这篇博文会持续补充更新......
  • 「题解」Codeforces Round 887 (Div. 2)
    A.DesortingProblem题目Sol&Code若序列一开始无序答案为\(0\)若有序即\(a_1\leqa_2\leq\dots\leqa_n\)。若想让\(a_i>a_j(i<j)\),操作次数与两数差值\(d(d=a_j-a_i)\)相关为\(\lfloor\dfrac{d}{2}\rfloor+1\),差值越小操作次数越少,故枚举相邻两数取最少......
  • 洛谷AT_jsc2019_qual_e Card Collector 题解
    题目链接CardCollector-洛谷|计算机科学教育新生态(luogu.com.cn)思路将每一行、每一列转化为点,第i行第j列的卡牌转化为i->j+m(m为行数)的有向边。总共会抽取m+n(m为行数,n为列数)张牌,每个点的出度为1。结果图为基环森林;那么题目就转化为求最大基环森林。代码1#include......
  • 牛客小白月赛 47 题解
    牛客小白月赛47A.牛牛的装球游戏标签暴力思路显然,答案为\(\pir^2l-[\frac{l}{2r}]*\frac{4\pir^3}{3}\)。时间复杂度为\(\mathcalO(1)\)。代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;intT;doubleans,pi=3.141592653589;intt,h,r;int......
  • 国标GB28181视频平台LntonGBS(源码版)国标云服务平台对页面过多导致加载困难的问题解决
    LntonGBS国标视频云服务平台不仅支持无缝、完整接入内网或者公网的国标设备,在输出上,实现全平台、全终端输出。平台可将GB/T28181设备/平台推送的PS流转成ES流,并提供RTSP、RTMP、FLV、HLS、WebRTC等多种格式视频流的分发服务,实现Web浏览器、手机浏览器、微信端、PC客户端等各终端无......
  • 【题解】Educational Codeforces Round 151(CF1845)
    VP战报:1h过了A,B,C,D然后被E罚坐1hrank:210th题解只有A-EA.ForbiddenInteger题目描述:你需要构造一个正整数序列,满足:对于\(i\),\(a_i\lek\)且\(a_i\not=x\)。\(\suma_i=n\)。如无法构造,输出NO,否则输出YES后,输出序列长度与序列中的每一个数。多测\(t\le......
  • AT_abc180_d 题解
    洛谷链接&Atcoder链接本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读。题目简述现有\(STR\)和\(EXP\)两个变量,初始化分别为\(X\)和\(0\),可对变量\(STR\)做以下两种操作:将\(STR\)乘\(A\),并将\(EXP\)自加\(1\)。将\(STR\)加上\(B\),并将\(E......
  • P1387 最大正方形 题解
    注意细节通过二维前缀和判定矩形内是否全为1,计算和等于长度的平方就判断为是复杂度\(\Theta(n^2\log{n})\)#include<bits/stdc++.h>#defineN(int)(105)usingnamespacestd;intmp[N][N];ints[N][N];intn,m;boolcheck(intlenth){ for(inti=1;i+lenth......
  • Codeforces Round 886 (Div. 4) 题解 A - H
    A.ToMyCritics题目大意给定三个数,你可以挑俩数加起来,问这仨数有没有可能加起来大于等于\(10\).解题思路我们找其中最大的两个数相加与\(10\)比较即可。ACCode#include<iostream>#include<algorithm>#include<cstring>#defineendl'\n'#defineiosios::sync......