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


  • 相关阅读:
    实验二Step1-有序顺序表
    0330复利计算4.0(改)
    0330复利计算4.0单元测试
    实验一 命令解释程序的编写
    《构建之法》之第1、2、3章读后感
    0408-汉堡包的方式评价合作伙伴
    0406-复利计算5.0
    0405—软件工程 《构建之法》 第四章读后感
    03-29复利计算单元测试
    03-25实验一、命令解释程序的编写
  • 原文地址:https://www.cnblogs.com/herumw/p/9464694.html
Copyright © 2011-2022 走看看