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
containk-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.

Sample test(s)
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.

题意:给你n个字符串,每个字符串的长度都为k,然后对每个字符串中的字母顺序进行调换,当一个字符串调换顺序时,其他字符串都以相同的规律调换,问你调换过程中最大的数和最小的数的差的最小值是多少。

思路:只要把所有情况搜出来就行了,刚开始还想找规律。。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<set>
#include<queue>
#include<stack>
#include<string>
#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){
num=0;
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\n");continue;
}
memset(vis,0,sizeof(vis));
dfs(1);
printf("%d\n",cha);
}
return 0;
}

最新文章

  1. LINQ系列:Linq to Object限制操作符
  2. Android Fragment 解析和使用
  3. loj 1004(dp)
  4. PHP 性能分析第一篇: Xhprof &amp; Xhgui 介绍
  5. Java并发——同步工具类
  6. C#和SQL操作Xml
  7. codeforces 421d bug in code
  8. 转 java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
  9. libev事件库使用笔记
  10. Python标准库概览
  11. winform 所遇
  12. vue-Swiper-awsome
  13. Hash之哈希表的详解
  14. JavaScript原型与闭包相关
  15. tomcat https 支持android 6.0及以上版本的配置方法
  16. Python图像识别(聚类)
  17. libevent源码分析:evmap_io_active_函数
  18. servlet第三篇
  19. php微信开发 -- 两种运营模式及服务器配置
  20. 解决self.encoding = charset_by_name(self.charset).encoding

热门文章

  1. Kioptrix Level 2
  2. Description Resource Path Location Type Failure to transfer org.apache.maven.plugins:maven-surefire-
  3. JavaScript常用API
  4. ftp协议服务器与tinyhttp服务demo
  5. Jenkins部署web项目到Tomcat(shell脚本)
  6. 【Azure Developer】使用Microsoft Graph API创建用户时候遇见“401 : Unauthorized”“403 : Forbidden”
  7. Trie(字典树)
  8. php中一种单引号逃逸造成的注入
  9. Docker安装Mycat并实现mysql读写分离,分库分表
  10. Phoenix表和索引分区优化方法