比赛 20120613 评测结果 AAWWWAWAWA
题目名称 表达式 最终得分 50
用户昵称 QhelDIV 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-06-13 16:38:03
显示代码纯文本
#include <fstream>
#include <cstdlib>
#include <set>
using namespace std;
ifstream fin("expressb.in");
ofstream fout("expressb.out");
int D,K,T,A[5000][800];
set<int>Set;

int Fig(int a,int b)
{
int temp=0,Min=~0u>>1,Max=0;
	while(a)
	{
		temp+=a%10;
		a/=10;
	}
	while(b)
	{
		Min=min(Min,b%10);
		Max=max(Max,b%10);
		b/=10;
	}
	return temp*Max+Min;
}

int Solve()
{
int i,j,k,l,m,temp;
	A[0][0]=1;A[0][1]=D;A[1][0]=1;A[1][1]=Fig(D,D);
	Set.clear();
	Set.insert(D);Set.insert(A[1][1]);
	if(A[0][1]==K)
		return 0;
	if(A[1][1]==K)
		return 1;
	for(j=2;;j++)
	{
		A[j][0]=0;
		for(k=0;k<j;k++)
			for(l=1;l<=A[k][0];l++)
				for(m=1;m<=A[j-k-1][0];m++)
				{
					temp=Fig(A[k][l],A[j-k-1][m]);
					if(Set.find(temp)==Set.end())
					{
						Set.insert(temp);
						A[j][++A[j][0]]=temp;
					}
					if(temp==K)
						return j;
				}
		if(A[j][0]==0)
			return -1;
	}
}

int main()
{
	fin>>T;
	for(int i=1;i<=T;i++)
	{
		fin>>D>>K;
		if(K>738)
			fout<<-1<<endl;
		else
			fout<<Solve()<<endl;
	}
	fin.close();
	fout.close();
	return 0;
}