QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#71540#3230. Beautiful Nowzhangboju#AC ✓1560ms3676kbC++171.8kb2023-01-11 09:24:502023-01-11 09:24:52

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-01-11 09:24:52]
  • 评测
  • 测评结果:AC
  • 用时:1560ms
  • 内存:3676kb
  • [2023-01-11 09:24:50]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
template <typename T> inline void read(T &x)
{
	x=0;short f=1;char c=getchar();
	for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
	for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	x*=f;return;
}
int n,k;
int a[15],la;
int mb[15],lb;
int bh[15],ss[15];
bool kq[15],col[15];
bool flag;
int mx,mi;
void check()
{
	memset(col,0,sizeof(col));
	if(a[ss[0]]==0) return;
	int ans=0;
	int ds=0;
	for(int i=0;i<la;i++)
	{
		if(col[i]==0)
		{
			ds=0;
			int wz=i;
			while(col[wz]==0)
			{
				col[wz]=1;
				ds++;
				wz=bh[ss[wz]];
			}
			ans+=ds-1;
		}
	}
	if(ans<=k)
	{
		int ttt=0;
		for(int i=0;i<la;i++)
		{
			ttt*=10;
			ttt+=a[ss[i]];
		}
		if(mx<ttt) mx=ttt;
		if(mi>ttt) mi=ttt;
	}
	return;
}
int main()
{
	int T;read(T);
	while(T--)
	{
		read(n),read(k);
		mx=mi=n;
		if(n==1000000000)
		{
			puts("1000000000 1000000000");
			continue;
		}
		int tn=n;
		la=0;
		while(tn>0)
		{
			a[la]=tn%10;
			la++;
			tn/=10;
		}
		if(k>=la-1)
		{
			sort(a,a+la);
			int jl=0;
			if(a[0]==0)
			{
				for(int i=0;i<n;i++)
				{
					if(a[i]!=0)
					{
						a[0]=a[i];
						jl=i;
						a[i]=0;
						break;
					}
				}
			}
			for(int i=0;i<la;i++)
				printf("%d",a[i]);
			putchar(' ');
			a[jl]=a[0];
			if(jl!=0) a[0]=0;
			for(int i=la-1;i>=0;i--)
				printf("%d",a[i]);
			puts("");
			continue;
		}
		sort(a,a+la);
		tn=n;
		lb=0;
		while(tn>0)
		{
			mb[lb]=tn%10;
			lb++;
			tn/=10;
		}
		for(int i=0;i<la;i++)
		{
			for(int j=0;j<la;j++)
			{
				if(a[i]==mb[j])
				{
					bh[i]=la-j-1;
					mb[j]=-1;
					break;
				}
			}
		}
		for(int i=0;i<la;i++) ss[i]=i;
		flag=false;
		do
		{
			check();
		}while(next_permutation(ss,ss+la));
		printf("%d %d\n",mi,mx);
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1560ms
memory: 3676kb

input:

100
645637224 8
397815246 8
239758591 7
152472214 2
485635752 8
128947635 5
938124675 8
311384311 8
665595968 7
284675191 6
3596920 776160768
428993752 4
796354812 4
342871569 7
952970714 2
399469166 8
774997047 1
534968712 5
574918236 3
564999511 645561291
791543286 7
171222224 7
319647582 2
241573...

output:

223445667 766544322
123456789 987654321
123557899 998755321
112272454 754412212
234555678 876555432
123456789 987652134
123456789 987654321
111133348 843331111
555666899 998666555
112456798 987654211
2035699 9965320
223458799 998753422
123456879 987654312
123456789 987654312
102975794 997570214
1346...

result:

ok 100 lines