5.6
洛谷P1105 平台
//测试样例里平台会重叠。。。
模拟就好,双重循环枚举每一个平台,(10^3)^2<5*10^8,所以能过。
//别用结构体存所有变量。。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct plate{
int h;
int l,r;
int a,b;//左右边答案,已初始化为0
} q[1010];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>q[i].h>>q[i].l>>q[i].r;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(q[j].h<q[i].h){ //从高落到低
//左边下落
if(q[j].l< q[i].l&&q[i].l <q[j].r) //能落到台阶上
if(q[q[i].a].h<q[j].h) //答案是编号小的
q[i].a=j;
//右边下落
if(q[j].l< q[i].r&&q[i].r <q[j].r)
if(q[q[i].b].h<q[j].h)
q[i].b=j;
}
for(int i=1;i<=n;i++)
cout<<q[i].a<<" "<<q[i].b<<endl;
return 0;
}
不用结构体多好!!
#include<iostream>
using namespace std;
int n,a[1001],b[1001],c[1001];
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i]>>b[i]>>c[i];
for(int i=1;i<=n;i++){
int sum1=0,sum2=0;
for(int j=1;j<=n;j++)if(a[j]<a[i]&&b[j]<b[i]&&c[j]>b[i])if(a[sum1]<a[j])sum1=j;//左边下落
cout<<sum1<<" ";
for(int j=1;j<=n;j++)if(a[j]<a[i]&&b[j]<c[i]&&c[j]>c[i])if(a[sum2]<a[j])sum2=j;//右边下落
cout<<sum2<<endl;
}
}