博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
COJ1127(芝麻开门)
阅读量:4624 次
发布时间:2019-06-09

本文共 765 字,大约阅读时间需要 2 分钟。

题目大意,给定一个整数表达式A1/A2/A3/.../An,('/'为除号1<=n<=10000,1<=Ai<=1000000000),问是否能通过添加括号使得表达式的值为整数。咋一看似乎没思路,但仔细想,不难发现这里存在最优策略,最优策略是用一个括号将表达式变成A1/(A2/A3/.../An)。证明如下:n为1时,直接输出"YES",n大于1时,首先,A2一定为分母,无论如何添加括号都无法改变这个事实,其次,按照上面的策略加括号后,只有A2为分母,所以这是个最优策略。有了最优策略后,我们需要做的就是不断约分(求最大公约数),看能否将其约为1,若能,表达式结果能为整数,否则不能。

View Code
1 #include 
2 int gcd(int a,int b) 3 { 4 int t; 5 while(a%b) t=a,a=b,b=t%b; 6 return b; 7 } 8 int main() 9 {10 int i,n,a,b;11 while(~scanf("%d",&n))12 {13 scanf("%d",&a);14 if(n==1)15 {16 printf("YES\n");17 continue;18 }19 scanf("%d",&b);20 b/=gcd(a,b);21 for(i=2;i

 

转载于:https://www.cnblogs.com/algorithms/archive/2012/04/13/2445278.html

你可能感兴趣的文章
Restful levels
查看>>
Phonegap移动开发:布局总结(一) 全局
查看>>
Java 变参函数的实现
查看>>
nrf51 SDK自带例程的解读
查看>>
SESSION技术
查看>>
数据结构(五)之直接插入排序
查看>>
SQL函数——LENGTH()和LENGTHB()
查看>>
vim - manual -个人笔记
查看>>
详解Javascript中prototype属性(推荐)
查看>>
angularjs实现首页轮播图
查看>>
Git 对象 和checkout 和stash的笔记
查看>>
团队项目总结2-服务器通信模型和顺序图
查看>>
hdu 1085 Holding Bin-Laden Captive!
查看>>
[周记]8.7~8.16
查看>>
递归定义
查看>>
kindeditor 代码高亮设置
查看>>
图的邻接表存储
查看>>
2018 leetcode
查看>>
PHP中获取当前页面的完整URL
查看>>
Chapter 4 Syntax Analysis
查看>>