1、题目的意思:一平台掉落它的左右两端点掉落会在哪个平台上。如果某高度有两块或更多平台,恰好一平台一个断点刚好掉落在上面,我们只算编号靠前的平台。
2、由于我们输入数据时,高度不是排序输入的,而是杂乱的。如果我们把输入的数据按高度进行降序,这样是不是更好做了。
3、平台A左端点掉落在平台B的条件是:A左端点大于B左端点,但小于B右端点。
同理平台A右断点掉落在平台C的条件是:A右断点大于B左断点,但小于B右断点。
代码
#include<iostream>
using namespace std;
//author: Zhaoyangfan
//date: 10.14
//problem: 1105
struct pin
{
int h;
int l;
int r;
int num;
};
int main()
{
struct pin p[1005];
int c[1005][2]={0};
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>p[i].h>>p[i].l>>p[i].r;
p[i].num = i+1;
}
for(int j=0;j<n;j++)
for(int i=0;i<n;i++)
{
if(p[i].h<p[i+1].h)
swap(p[i],p[i+1]);
else if((p[i].h==p[i+1].h) &&(p[i].num)>p[i].num)
swap(p[i],p[i+1]);
}
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(p[i].l>p[j].l&&p[i].l<p[j].r)
{
c[p[i].num][0]=p[j].num;
break;
}
else
continue;
}
for(int j=i+1;j<n;j++)
{
if(p[i].r>p[j].l&&p[i].r<p[j].r)
{
c[p[i].num][1]=p[j].num;
break;
}
else
continue;
}
}
for(int i=1;i<=n;i++)
cout<<c[i][0]<<" "<<c[i][1]<<endl;
return 0;
}