• CF181c


    题意:

    怎样改动得到一个beautiful数。。。

    枚举!!!

    View Code
     1 /*
     2 sort+bruce
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<iostream>
     9 #include<queue>
    10 //#include<map>
    11 #include<math.h>
    12 using namespace std;
    13 typedef long long ll;
    14 //typedef __int64 int64;
    15 const int maxn = 10005;
    16 const int inf = 0x7fffffff;
    17 const double pi=acos(-1.0);
    18 
    19 int vis[ maxn ];
    20 char last[ maxn ],tmp[ maxn ],a[ maxn ];
    21 int ans;
    22 
    23 int main(){
    24     int n,k;
    25     while( scanf("%d%d",&n,&k)!=EOF ){
    26         scanf("%s",a);
    27         memset( vis,0,sizeof( vis ));
    28         for( int i=0;i<n;i++ )
    29             vis[ a[ i ]-'0' ]++;
    30         ans=inf;
    31         
    32         for( int i=0;i<=9;i++ ){//枚举1 to 9 ,即k位相同的是多少
    33             
    34             if( vis[ i ]>=k ){
    35                 ans=0;
    36                 strcpy( last,a );
    37             }
    38             
    39             int now_sum=vis[ i ];    
    40             int now_cost=0;
    41             strcpy( tmp,a );
    42             for( int j=1;j<=9;j++ ){//对于每一位上 枚举是增是减 且 改变量是多少
    43                 if( i+j<=9 ){
    44                     for( int jj=0;jj<n;jj++ ){
    45                         if( now_sum==k ) break;
    46                         if( tmp[ jj ]==i+j+'0' ) now_sum++,now_cost+=j,tmp[ jj ]=i+'0';
    47                     }
    48                 }//这里从0 到 n-1 是因为原数是i+j,之后变为i。。这样就能得到字典序最小
    49                 if( i-j>=0 ){
    50                     for( int jj=n-1;jj>=0;jj-- ){
    51                         if( now_sum==k ) break;
    52                         if( tmp[ jj ]==i-j+'0' ) now_sum++,now_cost+=j,tmp[ jj ]=i+'0';
    53                     }
    54                 }
    55                 if( now_sum==k ) break;
    56             }
    57             tmp[ n ]='\0';
    58             if( now_sum==k ){
    59                 if( now_cost<ans||(now_cost==ans&&strcmp( last,tmp )>0) ){
    60                     ans=now_cost;
    61                     strcpy( last,tmp );
    62                     /*
    63                     printf("test\n");
    64                     printf("ans;%d ",ans);
    65                     printf("last: %s \n",last);
    66                     */
    67                 }
    68             }
    69         }
    70         printf("%d\n",ans);
    71         printf("%s\n",last);
    72     }
    73     return 0;
    74 }
    keep moving...
  • 相关阅读:
    DB-MySQL:MySQL 正则表达式
    DB-MySQL:MySQL 事务
    DB-MySQL:MySQL 索引
    DB-MySQL:MySQL 临时表
    DB-MySQL:MySQL 复制表
    DB-MySQL:MySQL 序列使用
    DB-MySQL:MySQL 处理重复数据
    DB-MySql:MySQL 及 SQL 注入
    mysql
    PHP+jQuery 注册模块的改进之一:验证码存入SESSION
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2964894.html
Copyright © 2020-2023  润新知