4 solutions

  • 1
    @ 2026-6-9 18:07:19

    不大哥怎么有做到100%的啊???

    • 1
      @ 2026-6-9 17:51:07

      //发题解啦,50%见谅

      #include<bits/stdc++.h>

      using namespace std;

      struct node{

      int x,t;
      

      }; int main(){

      int n,m;
      
      cin>>n>>m;
      
      vector<node> v(n+m+5);
      
      for(int i=1;i<=n+m;i++) cin>>v[i].x;
      
      for(int i=1;i<=n+m;i++) cin>>v[i].t;
      
      vector<int> c(m+5),u(n+5);
      
      int cn1=0,cn2=0;
      
      for(int i=1;i<=n+m;i++){
      
      	if(v[i].t==1) c[++cn1]=v[i].x;
      
      	else u[++cn2]=v[i].x;
      
      }
      
      vector<int> arr(m+3);
      
      for(int i=1;i<=n;i++){
      
      	int minn=1,minx=INT_MAX;
      
      	for(int j=1;j<=m;j++){
      
      		if(abs(u[i]-c[j])<=minx){
      
      			if(abs(u[i]-c[j])==minx){
      
      				if(j<minn){
      
      					minx=abs(u[i]-c[j]);
      
      					minn=j;
      
      				}
      
      			}
      
      			else if(abs(u[i]-c[j])<minx){
      
      				minx=abs(u[i]-c[j]);
      
      				minn=j;
      
      			}
      
      		}
      
      	}
      
      	arr[minn]++;
      
      }
      
      for(int i=1;i<=m;i++){
      
      	cout<<arr[i]<<" ";
      
      }
      
      return 0;
      

      }

      • -2
        @ 2026-5-27 17:03:34
        #define int long long
        #define endl '\n'
        using namespace std;
        int n,m,r[1000000],x;
        vector<int> a,b;
        int c[100000];
        signed main(){
        	ios::sync_with_stdio(0);
        	cin.tie(0),cout.tie(0);
        	cin>>n>>m;
        	for(int i=1;i<=n+m;i++){
        		cin>>r[i];
        	}
        	for(int i=1;i<=n+m;i++){
        		cin>>x;
        		if(x==0)b.push_back(r[i]);
        		else a.push_back(r[i]);
        	}
        	for(int i=0;i<n;i++){
        		int p=lower_bound(a.begin(),a.end(),b[i])-a.begin();
        		int h=-1;
        		int u=100000000000;
        		if(p>0){
        			int d=b[i]-a[p-1];
        			if(d<u){
        				u=d;
        				h=p-1;
        			}
        		}
        		if(p<m){
        			int d=a[p]-b[i];
        			if(d<u){
        				u=d;
        				h=p;
        			}
        		}
        		c[h]++;
        	}
        	for(int i=0;i<m;i++){
        		cout<<c[i]<<" ";
        	}
        	return 0;
        }
        
        
        
        • -2
          @ 2025-10-14 15:07:22

          出租车

          n,m1000n,m\leq 1000 可以对每个乘客枚举所有司机判断他会呼叫哪一个司机。

          所有司机在一个区间即左边所有乘客呼叫最左边的司机,右边所有乘客呼叫最右边的司机。

          对于所有数据,考虑每个乘客要么呼叫左边最接近自己的司机,要么呼叫右边最接近自己的司机,那么只需要从左往右扫一遍,记录当前最新的司机,并对于每个乘客记录左右最接近自己的司机再判断呼叫哪一边。实现上的细节是如果一个乘客左边没有司机,那么距离应该设置为极大值。O(n)O(n)

          • 1

          Information

          ID
          1594
          Time
          1000ms
          Memory
          256MiB
          Difficulty
          7
          Tags
          (None)
          # Submissions
          84
          Accepted
          20
          Uploaded By