hdu 1015 Safecracker

来源:互联网 发布:网络剧题材分布 编辑:程序博客网 时间:2024/05/17 02:08

就是一个组合数的方式

#include <string>#include <iostream>#include <algorithm>#include <cmath>using namespace std;int len;long long m;string str;int p[22];int targ[10];char targ2[10];bool visited[22];long long pows(int a,int b){long long val=1;for(int i=1;i<=b;i++)val*=a;return val;}bool flag=false;void dfs(int ch,int cur){targ[cur]=p[ch];if(cur==4){long long  tt=(long long )targ[0]-pows(targ[1],2)+pows(targ[2],3)-pows(targ[3],4)+pows(targ[4],5);//cout<<tt<<endl;if(m==tt){for(int i=0;i<5;i++)targ2[i]=char(targ[i]+64);flag=true;}return ;}cur++;for(int j=0;j<len;j++){if(visited[j]==false){visited[j]=true;dfs(j,cur);visited[j]=false;//回溯时还原}}}class NODES{};int main(){//freopen("in.txt","r",stdin);while(cin>>m>>str){if(m==0)break;flag=false;memset(visited,false,sizeof(visited));string::iterator its;int i=0;for(its=str.begin();its!=str.end();its++){p[i++]= *its-64;}len=str.size();sort(p,p+len);for(int i=0;i<len;i++ ){visited[i]=true;dfs(i,0);visited[i]=false; //回溯时还原}if(flag){for(int i=0;i<5;i++)cout<<targ2[i];cout<<endl;}elsecout<<"no solution"<<endl;}return 0;}


原创粉丝点击