#include<iostream>
#include<cstdio>
#include<set>
#include<memory.h>
using namespace std;
#define int long long
#define max(a,b) ((a)>(b)?(a):(b))
#define N 1000010
set<int> S;
int T,a,b,n;
int d;
int r[N],ans[N],v[N];
bool op;
int gcd(int x,int y){
return y?gcd(y,x%y):x;
}
inline bool compare(int x){
for(int i=x;i>=1;i--)
if(r[i]!=ans[i])
return ans[i]==-1 || r[i]<ans[i];
return 0;
}
void dfs(int k,int t,int p,int q){
if(k==d){
if(p!=1 || S.count(q))
return ;
r[k]=q;
if(compare(d))
for(int i=1;i<=d;i++)
ans[i]=r[i];
op=1;
return ;
}
t=max(t,(q-1)/p+1);
for(;;t++){
if(q*(d-k+1)<=t*p)
break;
if(S.count(t))
continue;
r[k]=t;
int np=p*t-q,nq=q*t,nr=gcd(np,nq);
dfs(k+1,t+1,np/nr,nq/nr);
}
}
signed main(){
scanf("%d",&T);
for(int i=1;i<=T;i++){
op=0;
S.clear();
scanf("%lld%lld%lld",&a,&b,&n);
printf("Case %lld: %lld/%lld=",i,a,b);
int x;
for(int j=1;j<=n;j++){
scanf("%lld",&x);
S.insert(x);
}
for(d=1;;d++){
memset(ans,-1,sizeof(ans));
dfs(1,0,a,b);
if(op)
break;
}
for(int j=1;j<d;j++)
printf("1/%lld+",ans[j]);
printf("1/%lld\n",ans[d]);
}
return 0;
}

UVA12558 埃及分数的更多相关文章

  1. uva12558埃及分数

    1,看这全英文的题目就怪蛋疼的. 2,这输入也是奇奇怪怪的的.3,想要好好做题,理解做题,就得好好看题自己要理解吸收消化.单纯看别人的话,说实话并没有什么用处. 一,看题. 1,首先,枚举的分数肯定不 ...

  2. UVA12558 埃及分数 Egyptian Fractions

    题意描述 题目描述的翻译挺清楚的了. 和原题的区别是多了禁用的分母.(还有毒瘤输入输出) 算法分析 显然这道题没有什么很好的数学方法来解决,所以可以使用搜索. 由于不确定深度,深搜显然无穷无尽. 所以 ...

  3. UVA12558 Egyptian Fractions (HARD version)(埃及分数)

    传送门 题目大意 给出一个真分数 a/b,要求出几个互不相同的埃及分数(从大到小),使得它们之和为 a/b (埃及分数意思是分子为1的分数,详见百度百科) 如果有多组解,则分数数量少的优先 如果分数数 ...

  4. 华为OJ平台——将真分数分解为埃及分数

    题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数.如:8/11 = 1/2+1/5+1/55+1/110. 输入: 输入一个真分数, ...

  5. 埃及分数&&The Rotation Game&&骑士精神——IDA*

    IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...

  6. 埃及分数问题_迭代加深搜索_C++

    一.题目背景 http://codevs.cn/problem/1288/ 给出一个真分数,求用最少的1/a形式的分数表示出这个真分数,在数量相同的情况下保证最小的分数最大,且每个分数不同. 如 19 ...

  7. Vijos 1308 埃及分数(迭代加深搜索)

    题意: 输入a.b, 求a/b 可以由多少个埃及分数组成. 埃及分数是形如1/a , a是自然数的分数. 如2/3 = 1/2 + 1/6, 但埃及分数中不允许有相同的 ,如不可以2/3 = 1/3 ...

  8. codevs1288 埃及分数(IDA*)

    1288 埃及分数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 在古埃及,人们使用单位分数的和(形如1/a的 ...

  9. JDOJ 1770 埃及分数

    JDOJ 1770: 埃及分数 https://neooj.com/oldoj/problem.php?id=1770 Description 分子均为1的分数叫做埃及分数,因为古代埃及人在进行分数运 ...

随机推荐

  1. android手机平板如何使用usb有线网卡

    最近有个项目需要在android平板上使用usb有线网卡,所以做了一部分工作,在这里简单总结一下. 我在TB上购买了一个micro-usb接口的android免驱有线网卡,这个网上很多,随便买一个符合 ...

  2. Spring NoSuchBeanDefinitionException

    转http://www.baeldung.com/spring-nosuchbeandefinitionexception 1. Overview In this article, we are di ...

  3. Redis性能监控

    参考地址: redis教程:http://www.runoob.com/redis/redis-tutorial.html redis百度百科:https://baike.baidu.com/item ...

  4. JVM探秘4---垃圾收集器介绍

    Java虚拟机有很多垃圾收集器 下面先来了解HotSpot虚拟机中的7种垃圾收集器:Serial.ParNew.Parallel Scavenge.Serial Old.Parallel Old.CM ...

  5. python中从键盘输入内容的方法raw_input()和input()的区别

    raw_input()输出结果都是字符串 Input()输入什么内容,输出就是什么内容

  6. ref 参数与out参数

    变量作为参数传给方法,同时希望在方法执行完成后对参数,反应到变量上面.就需要用到ref和out这两个参数. ref参数:在 传入前必须先初始化 out参数:不需要做预先的处理

  7. html5实现移动端下拉刷新(原理和代码)

    这篇文章给大家介绍的内容是关于html5实现移动端下拉刷新(原理和代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 移动端的下拉刷新是一个很常见的功能,也有许多开源库实现了这个功 ...

  8. double类型的数值计算

    package jiajian; public class jiajian { public static void main(String[] args) { System.out.println( ...

  9. 基于jquery 的dateRangePicker 和 My97DatePicker

    引入相应的date插件 <script type="text/javascript" src="../plugins/daterangepicker/moment. ...

  10. Java常考面试题(一)

    https://blog.csdn.net/linzhiqiang0316/article/details/80473906