/*题目的要求就是给你一串大字的字母,让你从中选取5个,v - w^2 + x^3 - y^4 + z^5 = target,并且要满足这个公式,找到最大的字典序,并输出*/

#include<iostream>
#include<algorithm>
#include<string.h>
#include<cmath>
using namespace std;
#define clean(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
typedef long long ll;
bool cmp(char a,char b)
{
	return a>b;
}
string str;
int flag;ll t;
bool sign[20];  //这里用来标记 
int s[6];       //存搜索过程中的字母,转化为整型 
void dfs(int k)
{
	if(flag) return ;  //找到了直接return  
    int i;
    if(k==5)
    {
        if(s[0]-s[1]*s[1]+s[2]*s[2]*s[2]-s[3]*s[3]*s[3]*s[3]+s[4]*s[4]*s[4]*s[4]*s[4]==t)
        flag=1;
        return ;
    }
    for(i=0;i<str.size();i++)
    {
    	if(flag) return ;
        if(!sign[i])
        {
            sign[i]=true;
            s[k]=str[i]-'A'+1;
            dfs(k+1);
            sign[i]=false;
        }
    }
    return;
}
int main()
{
	while(cin>>t>>str,t!=0||str!="END")
	{
		sort(str.begin(),str.end(),cmp);//字母进行降序排列,这样第一次搜索到就能保证是字典的最大序列
		clean(sign,false);
		flag=0;
		dfs(0);  //直接dfs 
		if(flag)
        {
            for(int i=0;i<5;i++)
            printf("%c",s[i]-1+'A');
            cout<<endl;
		}
		else
		cout<<"no solution\n";
	}
	return 0;
} 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐