#include #include #include using namespace std; #define COORD_MAX 1e9 double f(unsigned long long x,unsigned long long y){ return x+y/x*COORD_MAX; } unsigned long long* coords; bool comp(unsigned int a,unsigned int b){ return f(coords[2*a],coords[2*a+1])>n>>k; float* speeds=new float[k]; double averageSpeed=0.0; for(unsigned int i=0;i>speeds[i]; averageSpeed+=speeds[i]; } averageSpeed/=k; coords=new unsigned long long[2*n]; double averageLength=0.0; for(unsigned int i=0;i>coords[2*i]>>coords[2*i+1]; if(i>=1) averageLength+=sqrt((coords[2*i]-coords[2*i-2])*(coords[2*i]-coords[2*i-2])+(coords[2*i+1]-coords[2*i-1])*(coords[2*i+1]-coords[2*i-1])); } inp.close(); averageLength/=n-1; spots=new unsigned long long[2*k]; double curX=coords[0]; double curY=coords[1]; unsigned int curPnt=0; int prevPnt=-1; double travel=0.0; double slope=((double)(signed int)(coords[2]-coords[0]))/((signed int)(coords[3]-coords[1]));; for(unsigned int i=0;i0.0){ double dist=sqrt((curX-coords[curPnt*2+2])*(curX-coords[curPnt*2+2])+ (curY-coords[curPnt*2+3])*(curY-coords[curPnt*2+3])); if(travel>=dist){ curPnt++; slope=((double)(signed int)(coords[2*curPnt+2]-coords[2*curPnt]))/((signed int)(coords[2*curPnt+3]-coords[2*curPnt+1])); travel-=dist; curX=coords[2*curPnt]; curY=coords[2*curPnt+1]; i--; continue; }else{ /* dx^2+dy^2=travel^2 dx/dy=slope (dy*scope)^2+dy^2=travel^2 dy^2*(scope^2+1)=travel^2 dy=sqrt(travel^2/(scope^2+1)) dx=slope*dy=slope*sqrt(travel^2/(slope^2+1)) */ double dy=sqrt(travel*travel/(slope*slope+1)); if(coords[2*curPnt+1]>coords[2*curPnt+3]) dy*=-1.0; curY+=dy; curX+=slope*dy; travel=0.0; } }else{ travel=averageLength+speeds[i]-averageSpeed; i--; continue; } unsigned int writePnt=curPnt; if(abs(curX-coords[2*curPnt])=k-1) whose[i]=k-1; else if(cur_counter<((float)pause_ls[by_closeness_pl[pause_index]])*speeds[by_closeness[pause_index]]/ (speeds[by_closeness[pause_index]]+speeds[by_closeness[pause_index+1]])) whose[i]=by_closeness_pl[pause_index]; else whose[i]=by_closeness_pl[pause_index+1]; cur_counter++; } unsigned long long* start_pos=new unsigned long long[2*k]; unsigned int last_pl=by_closeness_pl[0]; unsigned int int_start=0; for(unsigned int i=0;ibiggestX) biggestX=coords[2*by_closeness[j]]; if(coords[2*by_closeness[j]+1]biggestY) biggestY=coords[2*by_closeness[j]+1]; } unsigned long long LUx=biggestX,LUy=biggestY,RDx=smallestX,RDy=smallestY, RUx=smallestX,RUy=biggestY,LDx=biggestX,LDy=smallestY; double averageX=0.0,averageY=0.0; for(unsigned int j=int_start;j