思路:

枚举0-9之间的数,然后判断。

然后一鼓作气打成了大模拟。。。。我日啊。。。

心疼自己。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=1e4+10;
int n,k;
char s[N],ss[N];
int num[19];
int cnt[19],len;
int all[N][15]; void solve(int x)
{
int sum;
for(int i=0;i<len;i++)
{
int e=s[i]-'0';
if(cnt[e])
{
if(e>x)//5->3
{
cnt[e]--;
ss[i]=x+'0';
}
else//3->5
{
if((i-1>=0&&(all[len-1][e]-all[i-1][e])<=cnt[e])||(i==0&&all[len-1][e]<=cnt[e]))
{
ss[i]=x+'0';
cnt[e]--;
}
else
ss[i]=s[i];
}
}
else
ss[i]=s[i];
}
ss[len]='\0';
} char sss[N];
void solve2(int x)
{
int sum;
for(int i=0;i<len;i++)
{
int e=s[i]-'0';
if(cnt[e])
{
if(e>x)//5->3
{
cnt[e]--;
sss[i]=x+'0';
}
else//3->5
{
if((i-1>=0&&(all[len-1][e]-all[i-1][e])<=cnt[e])||(i==0&&all[len-1][e]<=cnt[e]))
{
sss[i]=x+'0';
cnt[e]--;
}
else
sss[i]=s[i];
}
}
else
sss[i]=s[i];
}
sss[len]='\0';
} int main()
{
scanf("%d%d",&n,&k);
scanf("%s",s);
len=strlen(s);
memset(all,0,sizeof(all));
memset(num,0,sizeof(num));
for(int i=0;i<len;i++)
{
int x=s[i]-'0';
if(i==0)
all[i][x]=1;
else
{
for(int kk=0;kk<=9;kk++){
if(kk==x)
all[i][x]=all[i-1][x]+1;
else
all[i][kk]=all[i-1][kk];
}
}
num[x]++;
} int ans=0x3f3f3f3f;
for(int i=0;i<=9;i++)
{
// printf("%d\n",num[i]);
int res=0;
int sum=num[i];
int t=1;
memset(cnt,0,sizeof(cnt));
if(sum>=k)
{
ans=0;
strcpy(ss,s);
break;
}
while(sum<k&&(i+t<=9||i-t>=0))
{
if(i+t<=9)
{
if(num[i+t]+sum>=k)
{
cnt[i+t]=k-sum;
res+=(k-sum)*t;
if(ans>res)
{
solve(i);
ans=res;
//printf("%d %d\n",i,ans);
}
else if(ans==res)
{
solve2(i);
if(strcmp(ss,sss)>0)
strcpy(ss,sss);
}
sum=k;
}
else
{
res+=num[i+t]*t;
sum+=num[i+t];
cnt[i+t]=num[i+t];
}
}
if(i-t>=0)
{
if(num[i-t]+sum>=k)
{
cnt[i-t]=k-sum;
res+=(k-sum)*t;
if(ans>res)
{
solve(i);
ans=res;
//printf("%d %d\n",i,ans);
}
// else if(ans==res)
// {
// solve2(i);
// if(strcmp(ss,sss)>0)
// strcpy(ss,sss);
// }
sum=k;
}
else
{
res+=num[i-t]*t;
sum+=num[i-t];
cnt[i-t]=num[i-t];
}
}
t++;
}
}
printf("%d\n",ans);
printf("%s\n",ss);
return 0;
}
/*
16 14
6124258626539246 22
4124248424439244
*/

最新文章

  1. 3小时搞定一个简单的MIS系统案例Northwind,有视频、有源代码下载、有真相
  2. iOS 设置铃声---加载音乐和音频然后进行播放
  3. ABP框架详解(四)Feature
  4. oracle连接的三个配置文件(转)
  5. jQuery演示10种不同的切换图片列表动画效果以及tab动画演示 2
  6. wpf 窗口程序下将datagrid导出为excel
  7. win7中protel99添加元件库
  8. hdoj 5355 Cake(分析+二分)
  9. Codeforces Round #180 (Div. 2) B. Sail 贪心
  10. Android studio插件安装
  11. Spring 事情具体详尽的解释
  12. JavaBean转JSON方式
  13. AngularJS 截取字符串
  14. 05 JS基础DOM
  15. ---- 关于Android蓝牙搜索到设备的图标显示和设备过滤
  16. java中间缓存变量机制
  17. win10远程桌面出现身份验证错误。要求的函数不受支持
  18. hdu2036
  19. Hystrix介绍以及服务的降级限流熔断
  20. VM 安装 linux Enterprise_R5_U4_Server_I386_DVD教程图解

热门文章

  1. 4 Python 日期和时间
  2. Abp模块分析
  3. xxx was built without full bitcode&quot; 编译错误解决
  4. 【二叉树的递归】04找出二叉树中路径和等于给定值的所有路径【Path Sum II】
  5. NO3:步履蹒跚-完成第一章节学习
  6. RTSP协议分析(二)
  7. eclipse如何集成tomcat插件
  8. 一 vue开发环境搭建
  9. 三 volatile关键字
  10. maven可用镜像