(一)
将输入的四个数差分得到三个值,这三个值相同的两个坐标符合条件。
用 map 存储记录这三个值的结构体,然后用 vector 存储下标。
(二)
AC 代码。
#include<bits/stdc++.h>
#define db double
#define pb push_back
#define fi first
#define se second
#define mkp make_pair
#define pii pair<int,int>
using namespace std;
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
struct node{
int x,y,z;
bool operator<(const node &p)const{
return x<p.x||x==p.x&&y<p.y||x==p.x&&y==p.y&&z<p.z;
}
};
map<node,vector<int> >mp;
int n,ans1=INT_MAX,ans2;
signed main(){
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
n=read();
for(int i=1;i<=n;i++){
int a=read(),b=read(),c=read(),d=read();
mp[(node){b-a,c-b,d-c}].pb(i);
}
for(auto t:mp){
vector<int>v=t.se;
if(v.size()<2)continue;
for(int i=0;i<v.size()-1;i++)
ans1=min(ans1,v[i+1]-v[i]);
ans2=max(ans2,v[v.size()-1]+v[v.size()-2]);
}
printf("%d %d\n",ans1,ans2);
return 0;
}
标签:int,题解,define,txt,P5086,getchar
From: https://www.cnblogs.com/Jh763878/p/18343157