//************************************* //* * //* NOI 2004 * //* Day ? Problem ? * //* rainfall.cpp * //* by Wu Jingyue * //* * //************************************* #include #include #include #include using namespace std; struct TBoard { double x,l,v; }; struct TSegment { double x1,y1,x2,y2; int uorl,order; }; struct TInterval { double x,y; }; const int maxn=10; const int maxm=500; const int maxk=250000; const double Zero=1e-6; ifstream fin("rainfall.in"); ofstream fout("rainfall.out"); TBoard Board[maxn]; int n; TSegment Segment[maxm]; int m; double Time[maxk]; int k; TInterval Interval[maxm]; int r; double w,t,v,ans; void Input_Data() { int i; fin>>n>>w>>t>>v; for (i=0; i>Board[i].x>>Board[i].l>>Board[i].v; fin.close(); } double Multi(double x1,double y1,double x2,double y2) { return x1*y2-x2*y1; } double MAX(double a,double b) { if (a>b) return a; else return b; } double MIN(double a,double b) { if (ax<((TInterval *)b)->x) return -1; else if (((TInterval *)a)->x==((TInterval *)b)->x) return 0; else return 1; } double GetLen(double x) { double ans,max; int i,j; r=0; for (i=0; imax) max=Interval[j].y; j++; } ans+=(max-Interval[i].x); i=j; } return ans; } void Solve() { int i,j; double curx,curv,curt,it,l,l1; m=0; for (i=0; i0) { curt+=(w-Board[i].l-curx)/fabs(curv); curx=w-Board[i].l; } else { curt+=curx/fabs(curv); curx=0; } Segment[m].x2=curt; Segment[m].y2=curx; Segment[m].uorl=0; Segment[m].order=i; if (Segment[m].x1