CF650A 题解
Problem
Meaning
求曼哈顿距离和欧氏距离相等的坐标组数量。
Solution
这道题用枚举复杂度较高,我们考虑探究当两点的曼哈顿距离与欧氏距离相等时,它们横纵坐标的关系。
如下图所示,
所以,当
我们也可以通过两种距离的计算公式推出这个结论。
设
当
等式两边平方,得
移项,合并同类项得
从而有
即
所以,我们可以分别记录相同的横坐标出现的次数和相同的纵坐标出现的次数,若某个横坐标或纵坐标出现了
但通过阅读样例
Code
通过三个映射表分别维护每个横坐标出现次数,每个纵坐标出现次数和每个位置上的重点数。
注意开 long long
!
#include<bits/stdc++.h>
using namespace std;
long long n,ans;
map<long long,long long> xeql,yeql;
map<pair<long long,long long>,long long> alleql;
long long f(long long x){
return (x*(x-1))/2;
}
int main(){
long long temx,temy;
scanf("%lld",&n);
for(int i=1;i<=n;++i){
scanf("%lld%lld",&temx,&temy);
++xeql[temx];
++yeql[temy];
++alleql[{temx,temy}];
}
map<long long,long long>::iterator iter1;
map<pair<long long,long long>,long long>::iterator iter2;
for(iter1=xeql.begin();iter1!=xeql.end();++iter1){
ans+=f(iter1->second);
}
for(iter1=yeql.begin();iter1!=yeql.end();++iter1){
ans+=f(iter1->second);
}
for(iter2=alleql.begin();iter2!=alleql.end();++iter2){
ans-=f(iter2->second);
}
printf("%lld",ans);
return 0;
}
本文作者:Pursuing-OIer
本文链接:https://www.cnblogs.com/blog21012004/p/17625729.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步