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