贪心样例能过,但0分
查看原帖
贪心样例能过,但0分
672360
Ch35楼主2022/8/16 21:29

0分

#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005],cnt,tmp,cnt1,cnt2;
bool cmp(int x,int y){
    if(x-m==0)return 1;
    return x-m<y-m;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
    
    sort(a+1,a+n+1,cmp);
    tmp=m;
    for(int i=1;i<=n;i++){
        if(a[i]>m&&m>tmp||a[i]<m&&m<tmp)tmp=m;
        cnt1+=abs(a[i]-tmp);
        tmp=a[i];
}       
    tmp=m;
    for(int i=n;i>=1;i--){
        if(a[i]>m&&m>tmp||a[i]<m&&m<tmp)tmp=m;
        cnt2+=abs(a[i]-tmp);
        tmp=a[i];
}
    cout<<min(cnt1,cnt2)<<' ';
    cnt=0;
    sort(a+1,a+1+n);
	tmp=m;
	if(n%2==1){
	    for(int i=1,j=n;i<=n/2+1;i++,j--){
        if(a[i]>m&&tmp>m||a[i]<m&&tmp<m)tmp=m;
        cnt+=abs(a[i]-tmp);
        tmp=a[i];
        if(i!=n/2+1){
            if(a[j]>m&&tmp>m||a[j]<m&&tmp<m)tmp=m;
            cnt+=abs(a[j]-tmp);
            tmp=a[j];
        }
    }
    }
    else{
       for(int i=1,j=n;i<=n/2;i++,j--){
        if(a[i]>m&&tmp>m||a[i]<m&&tmp<m)cnt+=abs(tmp-m),tmp=m;
        cnt+=abs(a[i]-tmp);
        tmp=a[i];
        if(a[j]>m&&tmp>m||a[j]<m&&tmp<m)cnt+=abs(tmp-m),tmp=m;
        cnt+=abs(a[j]-tmp);
        tmp=a[j]; 
    }
}
    cout<<cnt;
	return 0;
}
2022/8/16 21:29
加载中...