HDU 3131 One…Two…Five! (暴力搜索)

来源:互联网 发布:亚特兰大机场数据 编辑:程序博客网 时间:2024/06/07 13:51

题目链接:HDU 3131 One…Two…Five! (暴力搜索)

题意:给出一串数字,要求用加,减,乘,除(5/2=2)连接(计算无优先级:5+3*6=8*6=48),求所有结果中,含有‘3’且该数字出现频率最大,若频率相等,输出数字最大的。


暴力解决之


AC代码:



#include <stdio.h>#include <map>#include <string.h>#include <algorithm>#define LL __int64using namespace std;LL a[20],cnt,k;map<LL,LL> ans;map<LL,LL>::iterator it;bool cmp(LL a,LL b){return a>b;}LL cal(LL sum,LL temp,LL op){if(op==0)return sum+temp;if(op==1)return sum-temp>0? sum-temp:temp-sum;if(op==2)return sum*temp;if(op==3)return sum/temp;}void dfs(LL x,LL sum){if(x==cnt){LL tempsum=sum;while(tempsum){if(tempsum%10==3){ans[sum]++;k++;//printf("%I64d\n",sum);break;}tempsum/=10;}return  ;}for(LL i=0;i<4;i++){if(i==3 && a[x]==0)continue;LL temp=cal(sum,a[x],i);dfs(x+1,temp);}}int main(){char s[100];LL len,i;while(gets(s)){if(s[0]=='#')break;ans.clear();len=strlen(s);LL temp;cnt=temp=0;for(i=0;i<len;i++){if(s[i]==' '){a[cnt++]=temp;temp=0;continue;}temp=temp*10+s[i]-'0';}a[cnt++]=temp;k=0;dfs(1,a[0]);if(k){LL maxt=-1,maxans;for(it=ans.begin();it!=ans.end();it++){if(maxt<=(it->second)){maxt=it->second;maxans=it->first;if((it->first)>maxans)maxans=it->first;}}printf("%I64d\n",maxans);}elseprintf("No result\n");}return 0;}


1 0
原创粉丝点击