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;
    }


  • 相关阅读:
    高级选择器
    CSS的选择器
    HTML——标签
    HTML
    并发编程——协程
    并发编程——线程(二)
    并发编程——线程
    4.栈
    3.链表
    2.顺序表
  • 原文地址:https://www.cnblogs.com/herumw/p/9464694.html
Copyright © 2011-2022 走看看