poj 1248

#include <iostream> 
#include <cstdio> 
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
struct r{
 string s;
 int res;
};
bool comp(r r1, r r2){
 return r1.s<r2.s;
}
int lToI(char c){
 return c-'A'+1;
}

struct letters{int v,w,x,y,z;};
bool isRight(letters l, int target){
 return (l.v-
  l.w*l.w+
  l.x*l.x*l.x-
  l.y*l.y*l.y*l.y+
  l.z*l.z*l.z*l.z*l.z)==target;
}
int main(){
#ifndef ONLINE_JUDGE 
    freopen("in.txt","r",stdin); 
    freopen("out.txt","w",stdout); 
#endif 
 int n,len;
 char str[13];
 char *s1, *s2, *s3, *s4, *s5;
 vector<r> res;
 vector<r>::iterator ii;
begin:
 while(scanf("%d", &n), n){
  scanf("%s", str);
  len = strlen(str);
  for(s1=str;s1<str+len;s1++)
   for(s2=str;s2<str+len;s2++)
    for(s3=str;s3<str+len;s3++)
     for(s4=str;s4<str+len;s4++)
      for(s5=str;s5<str+len;s5++){
       letters l;
       l.v=lToI(*s1);
       l.w=lToI(*s2);
       l.x=lToI(*s3);
       l.y=lToI(*s4);
       l.z=lToI(*s5);
       if(isRight(l, n)){
        if(s1==s2||s1==s3||s1==s4||s1==s5||
         s2==s3||s2==s4||s2==s5||
         s3==s4||s3==s5||
         s4==s5)
         continue;
        r r1;
        r1.res=l.v+l.w+l.x+l.y+l.z;
        r1.s.push_back(*s1);
        r1.s.push_back(*s2);
        r1.s.push_back(*s3);
        r1.s.push_back(*s4);
        r1.s.push_back(*s5);
        res.push_back(r1);
        
        
       }
      }
       
  if(!res.empty()){    
   ii=max_element(res.begin(),res.end(), comp);
   printf("%c%c%c%c%c\n", (*ii).s.at(0), (*ii).s.at(1),(*ii).s.at(2),(*ii).s.at(3),(*ii).s.at(4));     
  }else{
   printf("no solution\n");      
  }
  res.clear();
 
 }
#ifndef ONLINE_JUDGE 
    fclose(stdin); 
    fclose(stdout); 
#endif 

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值