承认了,俺是小菜鸡呜呜呜呜
先po一个自己一开始做的直脑筋代码,已经忘记用结构体了。就无脑通的代码。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x,y;
cin>>n>>x>>y;
int a[1000];
int b[1000];
int c[1000];
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
c[i]=pow(a[i]-x,2)+pow(b[i]-y,2);
}
//第一个
int m=c[1];
int t=1;
for(int i=1;i<=n;i++)
{
if(c[i]<m)
{
t=i;
m=c[i];
}
}
c[t]=10000000;
//第二个
m=c[1];
int t1=1;
for(int i=1;i<=n;i++)
{
if(c[i]<m)
{
t1=i;
m=c[i];
}
}
c[t1]=10000000;
//第三个
m=c[1];
int t2=1;
for(int i=1;i<=n;i++)
{
if(c[i]<m)
{
t2=i;
m=c[i];
}
}
cout<<t<<endl;
cout<<t1<<endl;
cout<<t2<<endl;
}
然后感觉不对劲,我这样写太麻烦了,下面是自己找的别人写的结构体的代码,供自己记录学习一下。
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int distance; //距离
int id; //检测点编号
};
bool cmp(node n1,node n2) //自定义sort顺序
{
if(n1.distance==n2.distance) //距离一样编号小的排在前面
return n1.id < n2.id;
return n1.distance < n2.distance;
}
int main()
{
int n,x,y;
cin>>n>>x>>y;
node point[n];
for(int i=0;i<n;i++)
{
int point_x,point_y;
cin>>point_x>>point_y;
point[i].distance = (point_x-x)*(point_x-x) + (point_y-y)*(point_y-y);
point[i].id = i+1;
}
sort(point,point+n,cmp);
for(int i=0;i<3;i++)
cout<<point[i].id<<endl;
return 0;
}
注意事项:
1.队列必须从0开始,否则会扣10分
2.必须有确保distance相等时,按id大小排序,否则会扣20分