题目链接:Playing with Numbers
分类讨论:N=1,2,>2的情况;
N>2的情况如下(过于简陋请见谅)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=5e4+10;
struct node{
int a,b;
int idx;
double val;
node(){
a=b=idx=0;
val=0.0;
}
}maxa,maxb,mina,minb,v[maxn];
bool cmpa(node x, node y){
if(x.a==y.a)
return x.b<y.b;
return x.a<y.a;
}
bool cmpb(node x, node y){
if(x.b==y.b)
return x.a<y.a;
return x.b<y.b;
}
bool cmpv(node x,node y){
return x.val<y.val;
}
int main()
{
int n,fmax=0,fmin=0;
double lg2=log10(2),lg3=log10(3);
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d%d",&v[i].a,&v[i].b);
v[i].idx=i+1;
v[i].val=(double)v[i].a*1.0*lg2+(double)v[i].b*1.0*lg3;
}
if(n==1){
printf("%d %d %d %d\n",v[0].a,v[0].b,v[0].a,v[0].b);
}
else if(n==2){
maxa.a=max(v[0].a,v[1].a);
maxa.b=max(v[0].b,v[1].b);
mina.a=min(v[0].a,v[1].a);
mina.b=min(v[0].b,v[1].b);
printf("%d %d %d %d\n",maxa.a,maxa.b,maxa.a,maxa.b);
printf("%d %d %d %d\n",mina.a,mina.b,mina.a,mina.b);
}
else{
sort(v,v+n,cmpa);
maxa.a=v[n-1].a;maxa.b=v[n-1].b;maxa.idx=v[n-1].idx;
mina.a=v[0].a;mina.b=v[0].b;mina.idx=v[0].idx;
sort(v,v+n,cmpb);
maxb.a=v[n-1].a;maxb.b=v[n-1].b;maxb.idx=v[n-1].idx;
minb.a=v[0].a;minb.b=v[0].b;minb.idx=v[0].idx;
if(maxa.idx==maxb.idx) fmax=1;
if(mina.idx==minb.idx) fmin=1;
printf("%d %d %d %d\n",maxa.a,maxb.b,maxa.a,maxb.b);
sort(v,v+n,cmpv);
if(fmax&&fmin){
for(int i=0;i<n-2;i++){
printf("%d %d %d %d\n",maxa.a,maxb.b,mina.a,minb.b);
}
}
else if(fmax&&!fmin){
printf("%d %d %d %d\n",maxa.a,maxb.b,v[0].a,v[0].b);
for(int i=0;i<n-3;i++) printf("%d %d %d %d\n",maxa.a,maxb.b,mina.a,minb.b);
}
else if(!fmax&&fmin){
for(int i=0;i<n-3;i++) printf("%d %d %d %d\n",maxa.a,maxb.b,mina.a,minb.b);
printf("%d %d %d %d\n",v[n-1].a,v[n-1].b,mina.a,minb.b);
}
else{
printf("%d %d %d %d\n",maxa.a,maxb.b,v[0].a,v[0].b);
for(int i=0;i<n-4;i++) printf("%d %d %d %d\n",maxa.a,maxb.b,mina.a,minb.b);
printf("%d %d %d %d\n",v[n-1].a,v[n-1].b,mina.a,minb.b);
}
printf("%d %d %d %d\n",mina.a,minb.b,mina.a,minb.b);
}
return 0;
}