UVa 12558 - Egyptian Fractions (HARD version) [IDA*]
来源:互联网 发布:国际快递 知乎 编辑:程序博客网 时间:2024/05/20 10:13
简单版和加强版的区别就是数据范围扩大到了long long,并且加了限制条件。用IDA*算法即可解决。
#include <bits/stdc++.h>using namespace std;typedef long long LL;LL maxd, ans[10240], v[10240];set<LL> ban;LL gcd(LL a, LL b){ return b ? gcd(b, a % b) : a;}inline LL get_first(LL a, LL b){ return b/a + 1;}bool better(int d){ for(int i = d; i >= 0; --i) if(v[i] != ans[i]) return ans[i]==-1 || v[i]<ans[i]; return false;}bool DFS(int d, LL from, LL aa, LL bb){ if(d == maxd){ if(bb % aa || ban.count(bb/aa)) return false; v[d] = bb / aa; if(better(d)) memcpy(ans, v, sizeof(LL)*(d+1)); return true; } bool ok = false; from = max(from, get_first(aa, bb)); for(LL i = from; ; ++i){ if(ban.count(i)) continue; if(bb * (maxd+1-d) <= i * aa) break; v[d] = i; LL b2 = bb * i, a2 = aa * i - bb; LL g = gcd(a2, b2); if(DFS(d+1, i+1, a2/g, b2/g)) ok = true; } return ok;}int main(){ int T; cin >> T; for(int t = 1; t <= T; ++t){ int a, b, n; cin >> a >> b >> n; ban.clear(); while(n--){ int x; cin >> x; ban.insert(x); } for(maxd = 1; ; ++maxd){ memset(ans, -1, sizeof(ans)); if(DFS(0, get_first(a, b), a, b)) break; } printf("Case %d: %d/%d=1/%lld", t, a, b, ans[0]); for(int i = 1; i <= maxd; i++) printf("+1/%lld", ans[i]); printf("\n"); } return 0;}
0 0
- UVA 12558 Egyptian Fractions (HARD version) IDA*
- UVa 12558 - Egyptian Fractions (HARD version) [IDA*]
- UVa 12558 - Egyptian Fractions (HARD version)(IDA*)
- UVa 12558:Egyptian Fractions (HARD version)(IDA*)
- uva 12558Egyptian Fractions (HARD version)
- uva 12558Egyptian Fractions (HARD version)
- UVA 12558 Egyptian Fractions (HARD version)
- Egyptian Fractions (HARD version) UVA
- Egyptian Fractions (HARD version) UVA
- Egyptian Fractions (HARD version) UVA
- 12558 - Egyptian Fractions (HARD version)(IDA*算法)
- 12558 - Egyptian Fractions (HARD version)
- UVa 12558 Egyptian Fractions (HARD version)--迭代加深搜索
- 习题7-7 Egyptian Fractions (HARD version) 埃及分数 (IDA*)
- #UVA12588#Egyptian Fractions (HARD version)(ID_搜索基础题)
- UVA 12558(p216)----Eg[y]ptian Fractions(HARD version)
- 习题7-7 埃及分数(Eg[y]ptian Fractions (HARD version), Rujia Liu's Present 6, UVa 12558)
- Sicily 2409. Egyptian Fractions
- Catalan(卡特兰)数
- Java NIO 系列教程
- JSON数据的解析
- PHP 通过迭代创建级联目录
- 双路由器的配置
- UVa 12558 - Egyptian Fractions (HARD version) [IDA*]
- JAVA设计模式之工厂模式
- OpenGL阴影贴图详解
- A sweet review
- spring+mybatis工程jar包下载路径
- UVALive - 3177 Beijing Guards 二分
- 【英语总结】——出来混总是要还的
- Linux-网桥原理分析
- bzoj3564: [SHOI2014]信号增幅仪 最小圆覆盖