UVA12558 埃及分数
#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 埃及分数的更多相关文章
- uva12558埃及分数
1,看这全英文的题目就怪蛋疼的. 2,这输入也是奇奇怪怪的的.3,想要好好做题,理解做题,就得好好看题自己要理解吸收消化.单纯看别人的话,说实话并没有什么用处. 一,看题. 1,首先,枚举的分数肯定不 ...
- UVA12558 埃及分数 Egyptian Fractions
题意描述 题目描述的翻译挺清楚的了. 和原题的区别是多了禁用的分母.(还有毒瘤输入输出) 算法分析 显然这道题没有什么很好的数学方法来解决,所以可以使用搜索. 由于不确定深度,深搜显然无穷无尽. 所以 ...
- UVA12558 Egyptian Fractions (HARD version)(埃及分数)
传送门 题目大意 给出一个真分数 a/b,要求出几个互不相同的埃及分数(从大到小),使得它们之和为 a/b (埃及分数意思是分子为1的分数,详见百度百科) 如果有多组解,则分数数量少的优先 如果分数数 ...
- 华为OJ平台——将真分数分解为埃及分数
题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数.如:8/11 = 1/2+1/5+1/55+1/110. 输入: 输入一个真分数, ...
- 埃及分数&&The Rotation Game&&骑士精神——IDA*
IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...
- 埃及分数问题_迭代加深搜索_C++
一.题目背景 http://codevs.cn/problem/1288/ 给出一个真分数,求用最少的1/a形式的分数表示出这个真分数,在数量相同的情况下保证最小的分数最大,且每个分数不同. 如 19 ...
- Vijos 1308 埃及分数(迭代加深搜索)
题意: 输入a.b, 求a/b 可以由多少个埃及分数组成. 埃及分数是形如1/a , a是自然数的分数. 如2/3 = 1/2 + 1/6, 但埃及分数中不允许有相同的 ,如不可以2/3 = 1/3 ...
- codevs1288 埃及分数(IDA*)
1288 埃及分数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在古埃及,人们使用单位分数的和(形如1/a的 ...
- JDOJ 1770 埃及分数
JDOJ 1770: 埃及分数 https://neooj.com/oldoj/problem.php?id=1770 Description 分子均为1的分数叫做埃及分数,因为古代埃及人在进行分数运 ...
随机推荐
- (Review cs231n)loss function and optimization
分类器需要在识别物体变化时候具有很好的鲁棒性(robus) 线性分类器(linear classifier)理解为模板的匹配,根据数量,表达能力不足,泛化性低:理解为将图片看做在高维度区域 线性分类器 ...
- 微信小程序制作家庭记账本之七
最后一天,程序完成的仍然不是很好,作品很简陋,不过还是可以记账的,没有购买域名,别人无法使用,下次我会完成的更好.
- Android百大框架排行榜
Android百大框架排行榜 15类Android通用流行框架 - 流风,飘然的风 - 博客园https://www.cnblogs.com/zdz8207/p/android-opensource- ...
- bzoj2656 [Zjoi2012]数列(sequence)
题目链接 好久没写高精度了,调了很久QAQ 如果直接递归计算答案的话肯定会T 发现一个数不管是分成一奇一偶还是直接>>1,都会重复计算很多东西 我们只需要在递归的时候实时维护一个xx(an ...
- [转载] 关于出现“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式”错误的可能原因
1. 对于该问题确实存在UNION前后SELECT语句中的列数不同导致:2. 以下为个人遇到的一种可能:在项目开发中由于有张表是动态的,即有个基础表,其他的表按年月根据基础表来生成动态表,动态表结构和 ...
- Bootstrap表单样式
<form class="form-horizontal" role="form"> <fieldset> <legend> ...
- centos误删mysql root用户找回办法
一天,我进入mysql后,查看所有用户 select host,user from mysql.user; 发现好多用户名, 太乱了,删除..... delete from user where us ...
- eclipse maven jar工程导出项目依赖的jar包
今天遇到个事,给业务开发/测试搞个了转换工具,是使用swing写的,依赖了很多的三方包,为了方便打算以bat方式提供,但是要导出依赖的三方jar,网上搜了下,如下(已测试): 一.导出到默认目录 ta ...
- U盘中病毒,文件消失或不显示
最近非常流行的一个病毒,将电脑或者U盘里的文件全部用快捷方式替换,真实文件被隐藏起来,下面我们就具体了解下此种病毒吧,做好预防与杀毒工作. 一.病毒名称 病毒名称:移动盘同名文件夹病毒;文件夹EXE病 ...
- redhat7.4+shell离线安装docker
首先要准备离线安装包 1.docker官网下载 2.docker-compose gitbub官网下载 3.我的docker-compose install-docker.sh #!/bin/sh u ...