现充|junyu33

题解 CF124B 【Permutations】

这个题有next_permutation就简单了

输入用字符串,用个f函数和permut数组(存数字所在位数)把其转换成整型。

m个数过一遍f后用next_permutation重置permut数组

以上过程进行n!遍后得出最小值

注意pow最好用数组,用内部可能WA。

#include<bits/stdc++.h>
using namespace std;
char num[10][10];
int range[10][10];
int permut[10];
int m,n;
int fac[]={1,1,2,6,24,120,720,5040,40320,362880};
int poww[]={1,10,100,1000,10000,100000,1000000,10000000,100000000};
int f(int a)
{
	int t=0;
	for(int i=n; i>=1; i--) t+=range[a][i]*poww[10,permut[i]-1];
	return t;
}
int main()
{
	cin>>m>>n;
	for(int i=1;i<=n;i++) permut[i]=i;
	for(int i=1; i<=m; i++)
		scanf("%s",num[i]+1);
	for(int i=1; i<=m; i++)
		for(int j=1; j<=n; j++)
			range[i][j]=num[i][j]-'0';
	int cha=2e9;		
	for(int i=1; i<=fac[n]; i++)
	{
		int maxn=0,minn=2e9;
		for(int j=1; j<=m; j++)
		{
			maxn=max(f(j),maxn);
			minn=min(f(j),minn);
		}
		cha=min(cha,maxn-minn);
		next_permutation(permut+1,permut+n+1);
	}
	cout<<cha;
	return 0;
}