#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
class Point
{
private:
int n_;
public:
vector<int> v_;
int n()
{
return n_;
}
Point(){}
Point(int n):n_(n){v_.resize(n_);}
~Point(){}
friend istream& operator>>(istream& is, Point& a);
};
istream& operator>>(istream& is,Point& A)
{
for(int i=0;i<A.n_;i++)
{
is>>A.v_[i];//用数组方式操作向量
}
return is;
}
class PointList
{
private:
vector<Point> vl_;
public:
friend class Point;
PointList operator+( Point& A)
{
vl_.push_back(A);
return *this;
}
friend ostream& operator<<(ostream& os, PointList a);
inline static bool CompareDistance( Point p1, Point p2)
{
double dist1 = 0.0, dist2 = 0.0;
for (int i = 0; i < p1.n(); i++)
{
dist1 += pow(p1.v_[i], 2);
}
for (int i = 0; i < p2.n(); i++)
{
dist2 += pow(p2.v_[i], 2);
}
if(dist1<dist2)
{
return true ;
}
else return false;
}
void Sort()//选择排序
{
int y=vl_.size();
for(int i=0;i<y-1;i++)
{
for(int j=i+1;j<y;j++)
{
if(CompareDistance(vl_[j],vl_[i]))
{
Point t(vl_[j]);vl_[j]=vl_[i];vl_[i]=t;
}
}
}
//sort(vl_.begin(), vl_.end(), CompareDistance);
}
};
ostream& operator<<(ostream& os, PointList a)
{int x=a.vl_.size();
for(int i=0;i<x;i++)//行数
{
os<<"[";
for(int j=0;j<a.vl_[i].n();j++)
{
if(j!=0)os<<",";
os<<a.vl_[i].v_[j];
}
os<<"]"<<endl;
}
return os;
}
int main(){
PointList pl;
int m,n,i;
cin>>m>>n;
for(i=0;i<m;i++){
Point tmp(n);
cin>>tmp;
pl=pl+tmp;
}
pl.Sort();
cout<<pl;
return 0;
}
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 136 Solved: 45
[Submit][Status]
Description
定义类Point表示一个N维空间中的坐标,定义PointList为若干个Point对象组成的列表。定义:
1.Point::Point(n)方法:用于将坐标的维数设置为n。
2.重载Point的>>运算符,根据Input的格式进行输入一个坐标。
3.重载PointList的<<运算符,根据Output的格式输出PointList的所有坐标值。
4.PointList::Sort():对PointList中的顶点按照到坐标原点的距离,从小到大排序。
5.重载PointList的+运算符,用于向列表中追加一个点的坐标。
其他所需要的数据成员、函数成员自行定义。
Input
输入有多行。
第一行是两个正整数M和N,其中M表示之后有M个点的坐标,N表示每个点的维数。如M=3,N=2表示有3个二维空间中的点。
之后的M行,每行包含N个整数,表示一个点的坐标。
Output
输出有M行,每行一个点的坐标。
输出时,按照到坐标原点,即[0,0,0,......]的距离从小到大输出。不存在距离相同的点。
每个点的坐标输出格式为:[d1,d2,...],即:用[]包围一个点的坐标,输出的坐标值两两之间用逗号隔开。
Sample Input
10 2 0 0 1 1 3 3 2 2 9 9 8 8 4 4 6 6 5 5 7 7
Sample Output
[0,0] [1,1] [2,2] [3,3] [4,4] [5,5] [6,6] [7,7] [8,8] [9,9]