zoukankan      html  css  js  c++  java
  • Codeforces Beta Round #92 (Div. 2 Only) B. Permutations

    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
    ");continue;
    		}
    		memset(vis,0,sizeof(vis));
    		dfs(1);
    		printf("%d
    ",cha);
    	}
    	return 0;
    }


  • 相关阅读:
    (转)Lucene.net搜索结果排序(单条件和多条件)
    .Net去html标签
    (转)Lucene.Net多字段查询,多索引查询
    HttpUtility
    内存卡问题汇总
    我的NHibernate
    (转)lucene.net和(pangu)盘古分词 搜索引擎的简单实现
    Power Designer使用技巧
    Oracle添加修改删除表字段
    在数据库开发过程中,数据库、表、字段、视图、存储过程等的命名规则
  • 原文地址:https://www.cnblogs.com/herumw/p/9464694.html
Copyright © 2011-2022 走看看