zoukankan      html  css  js  c++  java
  • CodeForces

    You are given n k-digit integers. You have to rearrange the digits in the integers so that the difference between the largest and the smallest number was minimum. Digits should be rearranged by the same rule in all integers.

    Input

    The first line contains integers n and k — the number and digit capacity of numbers correspondingly (1 ≤ n, k ≤ 8). Next n lines contain k-digit positive integers. Leading zeroes are allowed both in the initial integers and the integers resulting from the rearranging of digits.

    Output

    Print a single number: the minimally possible difference between the largest and the smallest number after the digits are rearranged in all integers by the same rule.

    Examples

    Input

    6 4
    5237
    2753
    7523
    5723
    5327
    2537
    

    Output

    2700
    

    Input

    3 3
    010
    909
    012
    

    Output

    3
    

    Input

    7 5
    50808
    36603
    37198
    44911
    29994
    42543
    50156
    

    Output

    20522
    

    Note

    In the first sample, if we rearrange the digits in numbers as (3,1,4,2), then the 2-nd and the 4-th numbers will equal 5237 and 2537 correspondingly (they will be maximum and minimum for such order of digits).

    In the second sample, if we swap the second digits and the first ones, we get integers 100, 99 and 102.

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    char s[100][100],str[100];
    int vis[100],k,cha,b[100],n;
    #define inf 99999999
    void dfs(int wei)
    {
    	int i,j,minx=inf,maxx=-inf,num;
    	if(wei==k+1){
    	
    		for(i=1;i<=n;i++){
    			num=0;
    			for(j=1;j<=k;j++){
    				num=num*10+s[i][b[j]]-'0';
    			}
    			maxx=max(maxx,num);
    			minx=min(minx,num);
    		}
    		cha=min(cha,maxx-minx);//return;
    	}
    	else{
    		 for(i=1;i<=k;i++){
    		   if(!vis[i]){
    			  vis[i]=1;
    			  b[wei]=i;
    			  dfs(wei+1);
    			  vis[i]=0;
    		   }
    	    }
    	}
    }
     
     
    int main()
    {
    	int m,i,j,t,num;
    	char c;
    	while(scanf("%d%d",&n,&k)!=EOF)
    	{
    		for(i=1;i<=n;i++){
    			scanf("%s",s[i]+1);
    		}
    		cha=inf;
    		if(n==1){
    			printf("0
    ");continue;
    		}
    		memset(vis,0,sizeof(vis));
    		dfs(1);
    		printf("%d
    ",cha);
    	}
    	return 0;
    }
    
  • 相关阅读:
    自用python时间格式转换lib库代码
    如何在datetime.strptime中添加时区
    bs3迁移到bs4, import lxml.html.soupparser 报错的解决
    mac下pip install lxml报错
    删除 Mac OS 10.10 中“打开方式”里重复或无用的程序列表
    python的urllib2库详细使用说明
    近期个人项目计划
    在centos中添加freeswitch服务开机自动运行
    ddd
    Sqlserver 2008安装
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781826.html
Copyright © 2011-2022 走看看