USACO-Zero Sum
来源:互联网 发布:金山软件微博 编辑:程序博客网 时间:2024/06/05 04:39
来源:http://ace.delos.com/usacoprob2?a=UGksUWcO9ZG&S=zerosum
简单的DFS,秒杀。
主要是不清楚C++中是否有函数可以直接计算表达式,所以自己写了个简单的计算函数。
搜索时按照空格,加号,减号的顺序,连排序都省了。
/*ID:ay27272PROG:zerosumLANG:C++*/#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>using namespace std;int n,sum;string result[100];string f;int number(int h,int &i) //返回一个数字,包括空格的处理,当然当前处理到的位置也要返回,所以用了一个i的引用{ int x=0; i=h; while (i<f.length() && f[i]!='+' && f[i]!='-') { if (f[i]!=' ') x=x*10+int(f[i]-'0'); i++; } return x;}bool calc() //直接按照运算符号进行运算{ int i,x=number(0,i); int temp,k; while (i<f.length()) { k=i; temp=number(i+1,i); if (f[k]=='+') x+=temp; else if (f[k]=='-') x-=temp; } return !x;}void dfs(int x){ if (x>n) { if (calc()) result[++sum]=f; return; } string tmp=f; f=f+' '+char(x+'0'); dfs(x+1); f=tmp; f=f+'+'+char(x+'0'); dfs(x+1); f=tmp; f=f+'-'+char(x+'0'); dfs(x+1); f=tmp;}int main(){ freopen("zerosum.in","r",stdin); freopen("zerosum.out","w",stdout); cin>>n; sum=0; f="1"; dfs(2); for (int i=1;i<=sum;i++) cout<<result[i]<<endl; return 0;}
- 【其他】【USACO】Zero Sum
- usaco-zero sum
- usaco: Zero Sum
- USACO Zero Sum
- usaco Zero Sum
- [usaco]2.3 Zero Sum
- USACO:Zero Sum
- USACO-Zero Sum
- USACO--2.3Zero Sum
- USACO 2.3 Zero Sum
- USACO-Zero Sum
- USACO 2.3 Zero Sum
- USACO :Zero Sum解题报告
- USACO 2.3.3 Zero Sum
- USACO 2.3.3 Zero Sum
- USACO 2.3 Zero Sum (zerosum)
- USACO 2.3.3 Zero Sum
- USACO 2.3.3 Zero Sum
- USACO-Party Lamps
- USACO-Longest Prefix
- jQuery实现彩色导航菜单
- C语言中的格式控制
- USACO-Cow Pedigrees
- USACO-Zero Sum
- USACO-Money Systems
- UVa-11292
- USACO-Controlling Companies
- USACO-The Tamworth Two
- USACO-Overfencing
- USACO-Bessie Come Home
- USACO-Cow Tours
- USACO-Fractions to Decimals