3 条题解

  • 1
    @ 2025-1-15 15:15:11

    so?

    #include<bits/stdc++.h>
    using namespace std;
    int a[100005],b[100005],n,m,h; 
    int main(){
    	cin>>m>>n;
    	for(int i=1;i<=m;i++){
    		cin>>a[i];
    	}
    	for(int i=1;i<=n;i++){
    		cin>>b[i];
    	}
    	sort(a+1,a+m+1);
    	for(int i=1;i<=n;i++){
    		int k=lower_bound(a+1,a+n+1,b[i])-a;
    	    if(k==1){
    	    	h+=abs(a[k]-b[i]);
    		}
    		else if(k==m+1){
    			h+=abs(a[m]-b[i]);
    		}
    		else{
    			h+=min(abs(a[k]-b[i]),abs(a[k-1]-b[i]));
    		}
    	}
    	cout<<h;
    	return 0;
    }
    
    • 0
      @ 2025-1-1 12:17:34
      #include<iostream>
      #include<cstdio>
      #include<algorithm>
      using namespace std;
      int line[100005];
      int main()
      {
      	int m,n;
      	cin>>m>>n;
      	int t=0,k=0;
      	while(t<m)
      	{
      		cin>>line[t];
      		t++;
      	}
      	sort(line,line+t);//以上是读入和排序分数线
      	int sum=0;
      	while(k<n)
      	{
      		int num;
      		cin>>num;
      		k++;
      		int L=0,R=t-1;
      		int ans=1000;//最小的差的绝对值,初始化为一个比较大的值
      		while(L<=R)//终止条件
      		{
      			int mid=(L+R)/2;//取中间值判断
      			if(line[mid]==num)
      			{
      				ans=0;
      				break;//零必然为最小的所求解,所以可直接终止二分,节约时间
      			}
      			else if(line[mid]<num)
      			{
      				ans=min(ans,abs(line[mid]-num));
      				L=mid+1;//可能的更好的答案在右边,右移,记录当前最优解,继续搜索
      			}
      			else if(line[mid]>num)
      			{
      				ans=min(ans,abs(line[mid]-num));
      				R=mid-1;//可能的更好的答案在左边,左移,记录当前最优解,继续搜索
      			}
      		}
      		sum+=ans;
      	}
      	cout<<sum;
      }
      
      • 0
        @ 2024-12-26 12:41:38

        #include #include using namespace std; int main() { int x,cn=0,m,a[100001],n,i,b[100001],l,r,mid; cin>>n>>m; for(i=1;i<=n;i++) cin>>a[i];//输入每个学校的录取分数线 sort(a+1,a+n+1);//快排,把所有学校录取分数线排序 for(i=1;i<=m;i++) cin>>b[i];//输入每个学生的估值 for(i=1;i<=m;i++) { l=1;r=n; while(l<r-1) { mid=(l+r)/2; if(b[i]>=a[mid]) l=mid; else r=mid; }//二分查找,找出学生估值所在那两个学校的录取分数线之间 x=abs(b[i]-a[l])<abs(a[r]-b[i])?abs(b[i]-a[l]):abs(a[r]-b[i]);//比与学生估值高的和低的两个学校的录取分数线进行相减取绝对值,作为该学生的不满意度 cn+=x;//计算不满意度总和 } cout<<cn;//输出 }

        • 1

        信息

        ID
        5736
        时间
        1000ms
        内存
        128MiB
        难度
        2
        标签
        递交数
        100
        已通过
        22
        上传者