而且有的人说高度相同序号从大到小,有的从小到大,还有的按左端点排序,这题毁我ac率
by s5_gan @ 2018-04-13 13:19:33
的确会重叠,第一个题解有分析
另附AC代码一份
#include<bits/stdc++.h>
using namespace std;
struct pin
{
int x,h,l,r,z,y;
int bian;
} p[1001];
bool s(pin a,pin b)
{
if(a.h==b.h) return a.bian<b.bian;
return a.h>b.h;
}
bool bianp(pin e,pin t)
{
if(e.bian<t.bian) return 1;
else return 0;
}
int main()
{
int n;
bool m=false,o=false;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>p[i].h>>p[i].l>>p[i].r;
p[i].bian=i;
}
sort(p+1,p+n+1,s);
for(int i=1;i<=n;i++)
{
m=1;
o=1;
for(int j=i;j<=n;j++)
{
if(i==n)
{
p[i].z=0;
p[i].y=0;
break;
}
if(p[i].l>p[j].l&&p[i].l<p[j].r&&m)
{
p[i].z=p[j].bian;
m=0;
}
if(p[i].r<p[j].r&&p[i].r>p[j].l&&o)
{
p[i].y=p[j].bian;
o=0;
}
if(!m&&!o) break;
}
if(m) p[i].z=0;
if(o) p[i].y=0;
}
sort(p+1,p+1+n,bianp);
for(int i=1;i<=n;i++)
{
cout<<p[i].z<<" "<<p[i].y<<endl;
}
return 0;
}
by 天问九歌 @ 2018-05-15 17:01:47