关于重叠的问题

P1105 平台

而且有的人说高度相同序号从大到小,有的从小到大,还有的按左端点排序,这题毁我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


|