classSolution{public:vector<int>assignBikes(vector<vector<int>>&workers,vector<vector<int>>&bikes){constintn=workers.size();constintm=bikes.size();vector<int>ans(n,-1);vector<bool>usedBikes(m);// buckets[k] := (i, j), where k = dist(workers[i], bikes[j])vector<vector<pair<int,int>>>buckets(2001);for(inti=0;i<n;++i)for(intj=0;j<m;++j)buckets[dist(workers[i],bikes[j])].emplace_back(i,j);for(intk=0;k<2001;++k)for(constauto&[i,j]:buckets[k])if(ans[i]==-1&&!usedBikes[j]){ans[i]=j;usedBikes[j]=true;}returnans;}private:intdist(constvector<int>&p1,constvector<int>&p2){returnabs(p1[0]-p2[0])+abs(p1[1]-p2[1]);}};
classSolution{publicint[]assignBikes(int[][]workers,int[][]bikes){finalintn=workers.length;finalintm=bikes.length;int[]ans=newint[n];boolean[]usedBikes=newboolean[m];// buckets[k] := (i, j), where k = dist(workers[i], bikes[j])List<Pair<Integer,Integer>>[]buckets=newList[2001];for(inti=0;i<2001;++i)buckets[i]=newArrayList<>();for(inti=0;i<n;++i)for(intj=0;j<m;++j)buckets[dist(workers[i],bikes[j])].add(newPair<>(i,j));Arrays.fill(ans,-1);for(intk=0;k<2001;++k)for(Pair<Integer,Integer>pair:buckets[k]){finalinti=pair.getKey();finalintj=pair.getValue();if(ans[i]==-1&&!usedBikes[j]){ans[i]=j;usedBikes[j]=true;}}returnans;}privateintdist(int[]p1,int[]p2){returnMath.abs(p1[0]-p2[0])+Math.abs(p1[1]-p2[1]);}}
classSolution:defassignBikes(self,workers:List[List[int]],bikes:List[List[int]])->List[int]:ans=[-1]*len(workers)usedBikes=[False]*len(bikes)# buckets[k] := (i, j), where k = dist(workers[i], bikes[j])buckets=[[]for_inrange(2001)]defdist(p1:List[int],p2:List[int])->int:returnabs(p1[0]-p2[0])+abs(p1[1]-p2[1])fori,workerinenumerate(workers):forj,bikeinenumerate(bikes):buckets[dist(worker,bike)].append((i,j))forkinrange(2001):fori,jinbuckets[k]:ifans[i]==-1andnotusedBikes[j]:ans[i]=jusedBikes[j]=Truereturnans