UVa 817 - According to Bartjens(暴力)
2015-02-08 04:46
288 查看
给出一串数字,加上+、-、*使得结果等于2000。
数字上限9个,直接进行暴力即可,感觉STL写起来快,居然还过了。
反正也挺简单的,就不想再用字符数组重写了,用字符数组应该会快好多。
数字上限9个,直接进行暴力即可,感觉STL写起来快,居然还过了。
反正也挺简单的,就不想再用字符数组重写了,用字符数组应该会快好多。
#include<iostream> #include<algorithm> #include<string> #include<set> #include<vector> #include<cctype> #include<map> using namespace std; const string sign[]={"*","+","-",""}; set<string> ans; map<char,int> dict; bool cal(string s){//计算字符串表示的值。 int t=0,p=0,q=0; vector<int> num,sg; while(1){ int num0=0,sg0=0; while(isdigit(s[p])) num0*=10,num0+=s[p++]-'0'; num.push_back(num0); if(s[p]=='=') break; sg0=dict[s[p++]]; sg.push_back(sg0); ++q; } for(int i=0;i<sg.size();++i){ if(sg[i]==1){ num[i+1]*=num[i]; num.erase(num.begin()+i); sg.erase(sg.begin()+i); --i; } } t=num[0]; for(int i=0;i<sg.size();i++){ if(sg[i]==2) t+=num[i+1]; else t-=num[i+1]; } return t==2000; } void dfs(string s,int pos,bool flag){ if(pos==s.size()-1){ if(cal(s)) ans.insert(s); return; } for(int i=0;i<4;++i){ if(!flag&&i==3) continue; string s0=s; if(s[pos]!='0') dfs(s0.insert(pos,sign[i]),i==3?pos+1:pos+2,true); else dfs(s0.insert(pos,sign[i]),i==3?pos+1:pos+2,i==3); } return; } int main(){ ios::sync_with_stdio(false); int t=0; string s; dict['*']=1,dict['+']=2,dict['-']=3; while(cin>>s){ ans.clear(); if(s[0]=='=') break; dfs(s,1,s[0]!='0'); cout<<"Problem "<<++t<<endl; if(!ans.size()||s=="2000=") cout<<" IMPOSSIBLE"<<endl;//至少要加一个符号。 else for(set<string>::iterator it=ans.begin();it!=ans.end();++it) cout<<" "<<*it<<endl; } return 0; }
相关文章推荐
- UVA - 817 According to Bartjens 暴力
- UVA 817 - According to Bartjens(暴力搜索)
- uva 817 - According to Bartjens(暴力)
- UVa 817 According to Bartjens (暴力,DFS)
- According to Bartjens UVA - 817
- UVa 817:According to Bartjens(DFS)
- UVA - 817 According to Bartjens
- According to Bartjens UVA - 817
- uva 817 According to Bartjens
- UVA - 817 According to Bartjens
- UVA - 10273 Eat or Not to Eat? 暴力
- uva 10273 - Eat or Not to Eat?(暴力枚举)
- UVA 10273 - Eat or Not to Eat?(暴力)
- Eat or Not to Eat? - UVa 10273 暴力
- UVA11475:Extend to Palindrome(Hash 或 KMP)
- UVA327暴力讨论所有情况
- UVA 11280 Flying to Fredericton
- 解决“The remote certificate is invalid according to the validation procedure”问题
- UVA 539 - The Settlers of Catan 暴力 全排列
- 错误处理——According to TLD or attribute directive in tag file, attribute test does not accept any expres