UVA - 10317 Equating Equations(普通的暴力枚举 dfs枚举 c(n,m))
来源:互联网 发布:希尔伯特矩阵的逆 编辑:程序博客网 时间:2024/06/05 16:14
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <vector>#include <map>#include <cctype>using namespace std;typedef long long LL;char str[100000];vector<char> Punct;vector<int> dig;int m ;void solve(){ Punct.clear(); dig.clear(); int n=strlen(str); int ln=0,rn=0,now_position=0; for(int i=0;i<n;i++){ if(str[i]!=' '){ int is_negative=0; if(ispunct(str[i])){ if(str[i+1]!=' '){ is_negative=1; } else{ Punct.push_back(str[i]); if(Punct.back()=='=') now_position = 1; continue; } } int j,num=0; for(j=i;j<n;j++){ if(str[j]==' ') break; if(isdigit(str[j])) num=num*10+str[j]-'0'; } if(is_negative) num=-num; if(!now_position){ if(Punct.empty()||Punct.back()=='+'){ ln++; } else rn++; } else { if(Punct.empty()||Punct.back()=='+'||Punct.back()=='='){ rn++; } else ln++; } dig.push_back(num); i=j; } } m = ln; // cout<<Punct.size()<<endl;}int SUM = 0;int vis[100];vector<int> ans1,ans2;void print(){ int now_position = 0,last=1; for(int i=0;i<dig.size();i++){ if(vis[i]) ans1.push_back(dig[i]); else ans2.push_back(dig[i]); } int s1=0,s2=0,p=0; for(int i=0;i<dig.size();i++){ if(i) printf(" "); if(!now_position){ if(last){ printf("%d",ans1[s1++]); } else printf("%d",ans2[s2++]); } else { if(last){ printf("%d",ans2[s2++]); } else printf("%d",ans1[s1++]); } if(i!=dig.size()-1){ printf(" %c",Punct[p]); if(Punct[p]=='='){ now_position = 1; last=1;} else if(Punct[p]=='+') last=1; else last=0; p++; } } printf("\n");}bool fff = false;void dfs(int i,int depth,int num){ if(fff) return ; if(depth == m){ if(num==SUM){ print(); fff= true; } return ; } for(int j=i+1;j<dig.size()&&j+m-depth-1<dig.size();j++){ vis[j] = 1; dfs(j,depth+1,num+dig[j]); vis[j] = 0; }}int main(){ while(gets(str)!=NULL){ solve(); SUM = 0; for(int i=0;i<dig.size();i++){ SUM+=dig[i]; } if(abs(SUM)%2 != 0){ printf("no solution\n"); continue; } ans1.clear(); ans2.clear(); fff = false; SUM/=2; memset(vis,0,sizeof(vis)); dfs(-1,0,0); if(!fff){ printf("no solution\n"); } } return 0;}
0 0
- UVA - 10317 Equating Equations(普通的暴力枚举 dfs枚举 c(n,m))
- 【UVA】10317 - Equating Equations(dfs + 剪枝)
- UVa 10317 - Equating Equations(DFS)
- uva 10317 - Equating Equations(dfs)
- UVa 10317 Equating Equations 解题报告(暴力)
- UVA 10317 - Equating Equations 贪心 dfs
- uva 10317 - Equating Equations
- uva 10317 Equating Equations
- UVa:10317 Equating Equations
- UVA 10317 Equating Equations (状态压缩)
- UVA 10317 - Equating Equations (背包)
- UVA 818 Cutting Chains (暴力二级制枚举+dfs)
- 10317 - Equating Equations
- 10317 - Equating Equations
- poj1753(dfs暴力枚举)
- poj2965(dfs暴力枚举)
- poj2965 DFS暴力枚举
- 枚举C(n,m)组合的算法集锦
- 原型模式(Prototype)
- SQL server 2008 添加,删除字段
- ActionBar 样式详解
- java swing jlist拖拽一条重新排序
- Oracle 索引扫描的五种类型
- UVA - 10317 Equating Equations(普通的暴力枚举 dfs枚举 c(n,m))
- Struts1与Struts2的区别
- Dreamweaver学习笔记1:html表格属性练习
- 第二节 为什么用MongoDB及.NET开发入门
- discuz! X3.2 注册不同步应用站点
- 键盘驱动组件事件
- 栈
- 火星人哭了,为什么?
- C语言定义与声明的区别