蓝桥杯2016c++A组真题&代码第十题最大比例

/*
最大比例X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。
并且,相邻的两个级别间的比例是个固定值。
也就是说:所有级别的奖金数构成了一个等比数列。比如:
16,24,36,54
其等比值为:3/2现在,我们随机调查了一些获奖者的奖金数。
请你据此推算可能的最大的等比值。输入格式:
第一行为数字 N (0<N<100),表示接下的一行包含N个正整数
第二行N个正整数Xi(Xi<1 000 000 000 000),用空格分开。每个整数表示调查到的某人的奖金数额要求输出:
一个形如A/B的分数,要求A、B互质。表示可能的最大比例系数测试数据保证了输入格式正确,并且最大比例是存在的。例如,输入:
3
1250 200 32程序应该输出:
25/4再例如,输入:
4
3125 32 32 200程序应该输出:
5/2再例如,输入:
3
549755813888 524288 2程序应该输出:
4/1资源约定:
峰值内存消耗 < 256M
CPU消耗  < 3000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。提交时,注意选择所期望的编译器类型。
*/

思路:

看代码注释

#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
typedef long long ll;
using namespace std;
int N;
const int MAXN = 110;
ll arr[MAXN];
map<ll,map<ll,ll> > all_ex; // all_ex[x][y] = i ,  对 x开方 y 次 的值
map<ll,map<ll,ll> > all_log;// all_log[x][y] = j  y 的 j 次 为 x  //对于 开方 和  取对数,可以通过生成再进行查找,从而加快速度
void init(){for(int i=2;i<1e6;i++){ll cur = (ll)i*i;ll pow = 2;while(cur<1e12){all_ex[cur][pow] = i;  // 对 cur 开 pow 次方 的答案 为 i all_log[cur][i] = pow;// 对  i 的 pow 次方是 cur   log i cur = pow  pow++;cur*=i;}}
}
struct ratio{ll x,y;ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}//两者除以最小公倍数,则获得对应的互质的比值 ratio(ll x,ll y):x(x),y(y){ll max_s = gcd(x,y);this->x/=max_s;this->y/=max_s; }
};
vector<ratio> ra_arr;
//思路:
//1.从小到大排序
//2.对第一对比值和后面的 比值进行比较,如果能够保证前面的比值是后面所有比值的基数
//那么就可以得到答案 // 对 x 进行 pow 次开方
ll extract(ll x, ll pow){// 开 1次方 就是本身  //对 1 进行任何开方 都是1  if(x ==1 ||pow == 1 )  return x;//对map 进行查找,如果能够找到  对 x 进行pow 次开方 ,则返回结果 if(all_ex[x].find(pow)!= all_ex[x].end()){return all_ex[x][pow];}//表示开方失败 return -1;
}
// 对 temp_x  取 以 base_x 为 底 的对数
ll log(ll temp_x,ll base_x){if(base_x == temp_x) return 1;if(all_log[temp_x].find(base_x) != all_log[temp_x].end()){return all_log[temp_x][base_x];}return -1;
}int main(){init();scanf("%d",&N);for(int i =0;i<N;i++){scanf("%lld",&arr[i]);}sort(arr,arr+N);for(int i =0;i<N-1;i++){//去重 if(arr[i]==arr[i+1]) continue;ra_arr.push_back(ratio(arr[i+1],arr[i]));}//特殊情况 if(N==2){ratio temp = ratio(arr[1],arr[0]);printf("%lld/%lld\n",temp.x,temp.y);return 0;   }//最小的情况 为 2为基数, 最多开 40次  因为 2^40 超过 1e12 for(int i=1;i<=40;i++){// 取第一个基数对 ll x = ra_arr[0].x;ll y = ra_arr[0].y;//对 x 开 i 次方  得到基数 ll base_x = extract(x,i);ll base_y = extract(y,i);//无法开方 if(base_x == -1  || base_y == -1 ) continue;bool all_match = true;//用第一对基数对所有的比值对进行比较 for(int j=0;j<ra_arr.size();j++){ll temp_x = ra_arr[j].x;ll temp_y = ra_arr[j].y;//取对数,这样才能保证是基数关系 ll log_x = log(temp_x,base_x);ll log_y = log(temp_y,base_y);// temp_y 和 base_y 可能有出现1 的情况,对此开方没有意义 if(temp_y ==1 && base_y == 1) log_y = log_x;if(log_y == -1||log_x == -1||log_x != log_y ){all_match = false;break;}}if(all_match){printf("%lld/%lld\n",base_x,base_y);return 0;}}return 0;
} 

蓝桥杯2016c++A组真题代码第十题最大比例相关推荐

  1. java蓝桥杯凑算是,第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)

    第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题,可以参见[图1.jpg]) 这个算式中AI代表19的数字,不同的字母代表不同的数字. ...

  2. 2017年 第八届蓝桥杯 Java B组真题整理

    2017年 第八届蓝桥杯 Java B组真题整理 1.购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞.这不,XX大促销又 ...

  3. 2022年第十三届蓝桥杯大赛C组真题C/C++解析(上)

    **今天给大家带来2022年,第十三届蓝桥杯大赛的真题解析** 转眼间,距离考试已经过去很长时间了,今天解元给大家解析一下,有问题欢迎大家指点 :笑: 下面进入正题 前言 填空题 1.排列字母 2.特 ...

  4. 蓝桥杯单片机十一届省赛_“第十届蓝桥杯青少组C++省赛”前三题解题思路及参考答案!...

    关注 及时了解信息学竞赛相关资讯 第十一届蓝桥杯青少组C++省赛即将到来,待考的各位小同学有没有刷完去年的真题呢?以下是为大家复习准备的"第十届蓝桥杯青少组C++省赛"前三题解题思 ...

  5. 第十二届 蓝桥杯 青少年C++组 10月比赛 第1题

    /* 第十二届 蓝桥杯 青少年C++组 10月比赛 第1题 王曙翰 2022.1.18 */ #include <bits/stdc++.h> using namespace std; i ...

  6. 第十二届 蓝桥杯青少年 C++组 10月比赛 第2题 统计字符

    /* 第十二届蓝桥杯青少年C++组 10月比赛 第2题 统计字符 王曙翰 2022.1.18 */ #include<bits/stdc++.h> #include<string.h ...

  7. 第十三届蓝桥杯Java B组真题

    试题 A: 星期计算 本题总分:5 分 [问题描述] 已知今天是星期六,请问 2022 天后是星期几? 注意用数字 1 到 7 表示星期一到星期日. [答案提交] 这是一道结果填空的题,你只需要算出结 ...

  8. 【2020蓝桥杯】Python组真题解析 - 第十一届蓝桥杯

    本资料整理者&代码编写者:夏2同学 个人邮箱:1754082565@qq.com 请勿未经同意转载 & 如有错误,欢迎指正 资料下载:https://download.csdn.net ...

  9. 第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)

    目录 A.奇数倍数 B.递增序列 C.平方拆分 D.切割(挺过分的题) E.序列求和 F.最长子序列 G.数正方形 H.矩阵计数 I.大胖子走迷宫 J.估计人数 A.奇数倍数 本题总分:5 分 问题描 ...

最新文章

  1. Linux 爱好者该向闭源软件敞开怀抱了
  2. Linux命令 比较文件
  3. 异步Socket通信总结[转]
  4. MAC下搭建java的开发环境
  5. 一生只有43年,喜欢泡妹打架,却凭借一篇文章震惊世界,跻身一流数学家
  6. ssh客户端_一款基于TAS框架的SSH客户端蠕虫
  7. 在网页中添加QQ聊天按钮
  8. 动画片动漫迷<未来的未来>高清图片壁纸
  9. EXPDP Fails With ORA-04031 (streams pool, ...)
  10. Typecho单栏式Major主题模板V1.8
  11. Windows查看快捷键占用情况
  12. 计算机培训学校可行性报告,在线考试系统可行性分析报告
  13. 苹果mac笔记本部分按键失灵,为什么要5连按⌥ option键
  14. 手机浏览器找不到服务器,苹果手机的Safari浏览器找不到服务器怎么办?
  15. 快递查询工具,如何查看单号在每个时间段的具体信息
  16. MMA-mathematica绘图
  17. 离散数学知识点总结(10)“关系” 知识的总结 <1>:关系的基础概念 —— 有序 n 元组,集合的笛卡尔积,集合的关系(二元关系)的定义,关系的集合运算, 关系的基本性质
  18. 利用js写的见缝插针小游戏
  19. 蚌埠医学院有计算机专业吗,安徽蚌埠医学院医学影像学专业
  20. AV(反病毒)技术的演进与规律思索观后感

热门文章

  1. Solr 配置文件之core.properties、solr.xml和Config Sets
  2. 读书汇(01)--中国人为什么组织不起来
  3. MFC多语言实现的两种方法
  4. 信息收集[架构CMS数据库中间件]
  5. 1694. 重新格式化电话号码[简单模拟]
  6. springboot集成京东物流查询快递,运费,标价运费
  7. 新西兰信报:移民规则变化 赴新中国学生人数减少
  8. 深度学习磁共振图像超分与重建论文阅读
  9. python 自动发微博_Python 教你自动发微博,每日一句英语
  10. Acwing - Linux基础课(九)- docker教程