Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么WA啊?只用了一个vector#include <iostream> #include <vector> #include <algorithm> using namespace std; const double eps = 1e-8; struct Point { double x; double y; }; struct Line { Point pa; Point pb; int index; }; vector<Line> vec_copy; vector<Line> vec_index; double ex(double a) { if(a > eps) return 1; else if(a < -eps) return -1; return 0; } double max(double a,double b) { return a > b ? a : b; } double min(double a,double b) { return a < b ? a : b; } double cross(const Point &ep,const Point &op,const Point &sp) { return((op.x - ep.x) * (sp.y - ep.y) - (sp.x - ep.x) * (op.y - ep.y)); } bool on_segment(const Point &p1,const Point &p2,const Point &p3) { if ( min( p1.x, p2.x ) <= p3.x && p3.x <= max( p1.x, p2.x ) && min( p1.y, p2.y ) <= p3.y && p3.y <= max( p1.y, p2.y ) ) { return true; } else { return false; } } bool segments_intersect(const Line &L1,const Line &L2) { double d1,d2,d3,d4; d1 = ex(cross(L2.pa,L2.pb,L1.pa)); d2 = ex(cross(L2.pa,L2.pb,L1.pb)); d3 = ex(cross(L1.pa,L1.pb,L2.pa)); d4 = ex(cross(L1.pa,L1.pb,L2.pb)); if(d1 * d2 < 0 && d3 * d4 < 0) { return true; } else if(d1 == 0 && on_segment(L2.pa,L2.pb,L1.pa)) { return true; } else if(d2 == 0 && on_segment(L2.pa,L2.pb,L1.pb)) { return true; } else if(d3 == 0 && on_segment(L1.pa,L1.pb,L2.pa)) { return true; } else if(d4 == 0 && on_segment(L1.pa,L1.pb,L2.pb)) { return true; } return false; } int main() { int n; while(cin>>n && n) { Line L; vector<Line> line; int i; vector<Line>::iterator iter; cin>>L.pa.x>>L.pa.y>>L.pb.x>>L.pb.y; L.index = 1; line.push_back(L); for(i = 1; i < n; i++) { cin>>L.pa.x>>L.pa.y>>L.pb.x>>L.pb.y; L.index = i + 1; int flag = 0; for(iter = line.begin(); iter < line.end(); iter++) { if(segments_intersect(L,*iter)) { line.erase(iter); } } line.push_back(L); } cout<<"Top sticks: "; for(i = 0; i < line.size() - 1; i++) { cout<<line[i].index<<", "; } cout<<line[i].index<<"."<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator