#include using namespace std; const int MAXN=1e5+6; const int SQ=330; struct runner { double speed; double x,y; int idx; bool operator<(runner const& other)const { return speedperm; }; int n,k,c; vectorrunners; vectorcomps; mt19937 mt(69); double eval(solution s) { for(int i=0;iassigned_comps1[MAXN]; vectorassigned_comps[MAXN]; int what[MAXN]; int group[MAXN]; point means[MAXN]; double dist_to_travel(vectorv) { //sort(v.begin(),v.end(),cmp); double ans=0; for(int i=1;i>n>>k; for(int i=0;i>s; runners.push_back({s,0,0, i}); } for(int i=0;i>x>>y; comps.push_back({x,y, i}); } //sort(comps.begin(),comps.end()); int szbucket = n/k; sort(runners.begin(),runners.end()); vectorids; for(int i=0;i=10000)c=(int)1e7/comps.size(); else if(runners.size()>=1000)c=50000000/comps.size(); else if(runners.size()>=100)c=60000000/comps.size(); else if(runners.size()>=10)c=70000000/comps.size(); else c=45000000/comps.size(); c=min(c,(int)runners.size()); calc_score(); for(int i=0;i