思路:

枚举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
*/

CodeForces 118C 【模拟】的更多相关文章

  1. CodeForces - 427B (模拟题)

    Prison Transfer Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Sub ...

  2. CodeForces - 404B(模拟题)

    Marathon Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

  3. Codeforces 709B 模拟

    B. Checkpoints time limit per test:1 second memory limit per test:256 megabytes input:standard input ...

  4. CodeForces - 404A(模拟题)

    Valera and X Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit ...

  5. Codeforces 390A( 模拟题)

    Inna and Alarm Clock Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64 ...

  6. Codeforces 452D [模拟][贪心]

    题意: 给你k件衣服处理,告诉你洗衣机烘干机折叠机的数量,和它们处理一件衣服的时间,要求一件衣服在洗完之后必须立刻烘干,烘干之后必须立刻折叠,问所需的最小时间. 思路: 1.按照时间模拟 2.若洗完的 ...

  7. CodeForces - 796B 模拟

    思路:模拟移动即可,如果球落入洞中停止移动.注意:有可能第一个位置就是洞!! AC代码 #include <cstdio> #include <cmath> #include ...

  8. CodeForces - 864C-Bus-(模拟加油站问题)

    https://vjudge.net/problem/CodeForces-864C 题意:两地之间有个加油站,往返走k个单程,最少加油多少次. 大佬几十行代码就解决,我却要用一百多行的if语句模拟解 ...

  9. Codeforces 709C 模拟

    C. Letters Cyclic Shift time limit per test:1 second memory limit per test:256 megabytes input:stand ...

随机推荐

  1. php中session的配置

    在 php.ini 中搜  session.save_path 查看session文件保存的目录;

  2. Hibernate学习---第十五节:hibernate二级缓存

    1.二级缓存所需要的 jar 包 这三个 jar 包实在 hibernate 解压缩文件夹的 lib\optional\ehcache 目录下 2.配置 ehcache.xml <ehcache ...

  3. C#异步编程之浅谈Task

    上一篇讲到了.Net4.5新增的async和await关键字,其实async和await算是一组标记,真正实现异步操作的是Task新开的任务线程. 什么是Task Task是.Net4.0新增用来处理 ...

  4. Tomcat_异常_01_Setting property 'source' to 'org.eclipse.jst.jee.server:AWeiXin_QiYe_Demo' did not find a matching property

    关于解决方法: 1.解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题 2.eclipse中server location为灰色 ...

  5. codeforces 617E E. XOR and Favorite Number(莫队算法)

    题目链接: E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes i ...

  6. visual studio 高级选项及配置

    visual studio 是一款强大的 IDE,所谓 IDE 即是将通过命令行(一系列复杂的参数选项)编译.链接等操作内置到 IDE 的界面按钮处. 为什么新建的工程,可以直接 #include & ...

  7. 【遍历二叉树】06二叉树曲折(Z字形)层次遍历II【Binary Tree Zigzag Level Order Traversal】

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个二叉树,返回他的Z字形层次 ...

  8. ACM学习历程—Hihocoder 1288 Font Size(暴力 || 二分)

    http://hihocoder.com/problemset/problem/1288 这题是这次微软笔试的第一题,关键的是s的上限是min(w, h),这样s的范围只有到1000,这样就可以直接暴 ...

  9. Poj 2299 Ultra-QuickSort(归并排序求逆序数)

    一.题意 给定数组,求交换几次相邻元素能是数组有序. 二.题解 刚开始以为是水题,心想这不就是简单的冒泡排序么.但是毫无疑问地超时了,因为题目中n<500000,而冒泡排序总的平均时间复杂度为, ...

  10. Poj 2662,2909 Goldbach's Conjecture (素数判定)

    一.Description In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard ...