求助,hack测试点T了,已经开了LL并且尝试极端数据剪枝
查看原帖
求助,hack测试点T了,已经开了LL并且尝试极端数据剪枝
1185696
afreshmanofclanguage楼主2024/7/21 11:04
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
ll m,n;ll sum;
ll sch[N],stu[N];
short check(int x,int val) // near value
{
    if(x == val) return 2;
    else if(x < val) return 1;
    else return 0;
}
int main()
{
    scanf("%d %d",&m,&n);
    for(int i = 1;i<=m;i++)
        scanf("%d",&sch[i]);
    sort(sch+1,sch + m+1);
    for(int i = 1;i<=n;i++)
        scanf("%d",&stu[i]);
    while(n)
    {
        int l = 1;int r = m;int mid =0;bool flag = 0;
        while(l + 1 != r)
        {
            mid = l + r >> 1;
            if(check(sch[mid],stu[n]) == 1)
                l = mid;
            else if(check(sch[mid],stu[n]) == 0)
                r = mid;
            else
            {
                flag = 1;break;
            }
        }
        if(!flag)
            sum += min(abs(stu[n] - sch[l]),abs(stu[n] - sch[r]));
        n--;
    }
    
    cout << sum;
    return 0;
}
2024/7/21 11:04
加载中...