不知道哪里错了,求助
查看原帖
不知道哪里错了,求助
285617
黑影洞人楼主2022/7/15 14:12
#include<cstdio>
#include<algorithm>
#define N 11451
using namespace std;
int mn,mx,n,k,a[N],x,mnn=2147483647,mnx=0,c[N],now[N],d[N];
char s[N];
struct node{
	int v,id;
}b[N];
bool cmp(node a,node b){
	if(abs(a.v-x)==abs(b.v-x))return a.id*a.v<b.id*b.v;
	return abs(a.v-x)<abs(b.v-x);
}
signed main(){
	scanf("%d%d",&n,&k);
	scanf("%s",s+1); 
	for(int i=1;i<=n;i++)a[i]=s[i]-48,mn=min(mn,a[i]),mx=max(mx,a[i]);
	for(x=mn;x<=mx;x++){
		c[0]=d[0]=0;
		for(int i=1;i<=n;i++)b[i].v=a[i],b[i].id=i,c[i]=0,d[i]=0;
		sort(b+1,b+n+1,cmp);
		int res=0;
		for(int i=1;i<=k;i++)res+=abs(x-b[i].v);	
		if(res<mnn){
			mnx=x,mnn=res;
			for(int i=1;i<=k;i++)c[b[i].id]=1;
			for(int i=1;i<=n;i++)now[i]=c[i]?x:a[i];
		}
		else if(res==mnn){
			for(int i=1;i<=k;i++)d[b[i].id]=1;
			for(int i=1;i<=n;i++){
				if(now[i]>(d[i]?x:a[i])){
					mnx=x,mnn=res;
					for(int i=1;i<=k;i++)c[b[i].id]=1;
					for(int i=1;i<=n;i++)now[i]=c[i]?x:a[i];
					break;
				}
				if(now[i]<(d[i]?x:a[i]))break;
			}
		}
	}
	printf("%d\n",mnn);
	for(int i=1;i<=n;i++)printf("%c",now[i]+'0');
	return 0;
}


2022/7/15 14:12
加载中...