标签:bzoj jloi 2013 计算几何 暴力 半平面交
题目大意:给出一些赛车的速度和初始位置,问那些赛车在比在中有过领先于其他所有车的时候。
思路:正解是解不等式组然后半平面交,不太想写。据说当年这个题暴力只卡掉了1个点,但是如果半平面交没写明白分就很低了。。
暴力也没什么好说的,就是注意一下输出,最后不能有换行,否则PE。。
CODE:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 10010 #define INF 1e18 using namespace std; #define max(a,b) ((a) > (b) ? (a):(b)) #define min(a,b) ((a) < (b) ? (a):(b)) struct Complex{ double pos,v; }src[MAX]; struct Interval{ double l,r; Interval(double _ = .0,double __ = .0):l(_),r(__) {} bool Merge(const Interval &a) { if(a.r < l) return false; if(a.l > r) return false; l = max(l,a.l); r = min(r,a.r); return true; } }; int cnt,ans[MAX]; int main() { cin >> cnt; for(int i = 1; i <= cnt; ++i) scanf("%lf",&src[i].pos); for(int i = 1; i <= cnt; ++i) scanf("%lf",&src[i].v); for(int i = 1; i <= cnt; ++i) { Interval now(.0,INF); bool flag = true; for(int j = 1; j <= cnt; ++j) { if(i == j) continue; Interval temp; if(src[i].v == src[j].v) temp = src[i].pos >= src[j].pos ? Interval(-INF,INF):Interval(-INF,-INF); else if(src[i].v > src[j].v) temp = Interval((src[j].pos - src[i].pos) / (src[i].v - src[j].v),INF); else temp = Interval(-INF,(src[j].pos - src[i].pos) / (src[i].v - src[j].v)); if(!now.Merge(temp)) { flag = false; break; } } if(flag) ans[++ans[0]] = i; } printf("%d\n",ans[0]); for(int i = 1; i < ans[0]; ++i) printf("%d ",ans[i]); if(ans[0]) printf("%d",ans[ans[0]]); return 0; }
标签:bzoj jloi 2013 计算几何 暴力 半平面交
原文地址:http://blog.csdn.net/jiangyuze831/article/details/42143701