UVA - 10717 Mint
2013-10-16 14:03
288 查看
题意:给你n种硬币厚度,m张桌子,让你求使得桌子平衡的数,一个要求输出不超过给定值的最大高度,一个是超过给定值的最小高度,其实就是求四个数的最小公倍数,利用公式lcm(a,b)=a*b/gcd(a,b),然后就是在枚举四种可能的同时找到最大和最小值,特殊的是当给定值恰好是最小公倍数的倍数时,最大最小值都是等于给定值
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 60; int coin[MAXN]; int n,t; int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } int main(){ while (scanf("%d%d",&n,&t) != EOF && n+t){ for (int i = 0; i < n; i++) scanf("%d",&coin[i]); int a,ans,Max,Min; for (int d = 0; d < t; d++){ scanf("%d",&a); Max = 0,Min = INF; for (int i = 0; i < n-3; i++){ for (int j = i+1; j < n-2; j++){ int m = coin[i]*coin[j]/gcd(coin[i],coin[j]); for (int k = j+1; k < n-1; k++){ int mm = m*coin[k]/gcd(m,coin[k]); for (int l = k+1; l < n; l++){ ans = mm*coin[l]/gcd(mm,coin[l]); int x,y; if (a%ans == 0) x = y = a; else x=(a/ans)*ans,y=(a/ans+1)*ans; Max = max(x,Max); Min = min(y,Min); } } } } printf("%d %d\n",Max,Min); } } return 0; }
相关文章推荐
- 相似度计算常用方法综述
- Response.ContentType 收集
- fixed: error C2784 from compiling adding an entry to a std::map
- 获取当前系统的时间转化成Long型
- sql like 时间
- mongoDB 索引使用
- Documentation_ioctl_cdrom.txt
- HQL: Hibernate查询语言
- 三星Galaxy camera刷机资料
- MapReduce和数据科学家(续)
- Javascript对象学习2 - 继承
- VS2010中文注释带红色下划线的解决方法
- Weblogic console控制台密码更改后导致重启服务失败
- 也谈项目经理与敏捷开发
- Linux_软件安装_01
- html5构建触屏网站之touch事件
- MySQL创建索引抛出“required more than 'innodb_online_alter_log_max_size' bytes of modification log”异常的解决方案
- GBK转UNCIDOE表
- 数据结构
- jQuery 中的 Ajax $.ajax() load() $.get() $.post() $.getJSON() $.getScript()