zoukankan      html  css  js  c++  java
  • CF118C Fancy Number

    Lisa

    这一道题绝对恶意评分了

    0-9,那么不如全求一遍

    对于每一个数字的话,显然先改差为 1 的,然后2---

    并且把大数改小是优先的

    而且把大数该小从前往后,小数改大从后往前

    这样我们先记录一下每个数字有多少个

    就好办了

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    #include<stack>
    #include<map>
    #define lll long long
    using namespace std;
    string s;
    int a[11];
    int n,m; 
    int anss=99999999;
    int Ar;
    int ans[11][11];
    int cos[11];
    string an,em;
    void cal(){
    	for(int i=0;i<=9;++i){
    		if(cos[i]>anss)
    		continue;
    		em=s;
    		for(int j=0;j<i;++j){
    			for(int z=n-1;z>=0;--z){
    				if((s[z]-'0'==j)&&ans[i][j]){
    					em[z]='0'+i;
    					ans[i][j]--;
    				}
    			}
    		}
    		for(int j=i+1;j<=9;++j){
    			for(int z=0;z<n;++z){
    				if((s[z]-'0'==j)&&ans[i][j]){
    					em[z]='0'+i;
    					ans[i][j]--;
    				}
    			}
    		}
    		if(cos[i]<anss){
    		//	cout<<"FD";
    			an=em;
    			anss=cos[i];
    		}else{
    			if(em<an){
    				an=em;
    			}
    		}
    	}
    	cout<<anss<<endl;
    	cout<<an;
    }
    int main(){
    	cin>>n>>m;
    	cin>>s;
    	for(int i=0;i<n;++i){
    		a[s[i]-'0']++;
    	}
    	for(int i=0;i<=9;++i){
    		int res=a[i];
    		if(res>=m){
    			cout<<0<<endl;
    			cout<<s<<endl;
    			return 0;
    		}
    		for(int j=1;j<=9;++j){
    			if(i+j<=9){
    				if(res+a[i+j]>=m){
    					cos[i]+=j*(m-res);
    					ans[i][i+j]+=m-res;
    					break;
    				}else{
    					res+=a[i+j];
    					cos[i]+=(a[i+j]*j);
    					ans[i][i+j]=a[i+j];
    				}
    			}
    			if(i-j>=0){
    				if(res+a[i-j]>=m){
    					cos[i]+=j*(m-res);
    					ans[i][i-j]=m-res;
    					break;
    				}else{
    					res+=a[i-j];
    					cos[i]+=a[i-j]*j;
    					ans[i][i-j]=a[i-j];
    				}
    			}
    		}
    	}
    	cal();
    	return 0;
    }
    	
    
    
    
  • 相关阅读:
    idea常用快捷键及操作
    Ubuntu 装nexus
    ubuntu安装gitlab
    ubuntu安装jdk,maven,tomcat
    ubuntu安装gitlab-ci-runner、注册
    ubuntu开启远程shell,开启上传下载
    Ubuntu安装软件提示boot空间不足
    POJ3461 KMP简单变形输出模式串在主串出现的次数
    涨姿势stl map['a']['a']=b;
    对链表的操作(数据结构线性表算法设计练习)
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15361794.html
Copyright © 2011-2022 走看看