[JSOI2009]瓶子和燃料

我们观察这个题面

发现

对于两个瓶子,他能够凑成的所有的数字是

\(x - ky\),\(2x - k'y\),\(3x - k''y\)

之后我们发现,这个和裴蜀定理的公式非常相似,而裴蜀定理的内容是

\(ax+by=c\)有解

当且仅当

\((a,b)|c\)

而题目中的火星人会给你最小化,所以对于两个瓶子,你的收益就是\((x,y)\)

我们类比推到\(k\)个瓶子

其实实际上就是讲将\(k\)个瓶子以此两两合并

所以题目转化成了

选出\(k\)个数,使得他们的\(gcd\)最大

这样的话

我们就要暴力枚举因子

用map记录出现次数更新答案就好了

#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<vector>
#include<ctime>
#include<map>
#define LL long long
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
using namespace std;
inline int read(){int v = 0,c = 1;char ch = getchar();while(!isdigit(ch)){if(ch == '-') c = -1;ch = getchar();}while(isdigit(ch)){v = v * 10 + ch - 48;ch = getchar();}return v * c;
}
map <int,int> m;
int n,k,ans;
inline int gcd(int x,int y){return y == 0 ? x : gcd(y,x % y);
}
inline void work(int x){for(int i = 1;1ll * i * i <= x;++i)if(x % i == 0){int r1 = x / i;int r2 = i;if(r1 == r2) --m[r1];int x1 = (++m[r1]);int x2 = (++m[r2]);//  printf("%d %d %d %d %d\n",x,r1,r2,x1,x2);if(x1 >= k) ans = max(ans,r1);if(x2 >= k) ans = max(ans,r2);}
}
int main(){n = read(),k = read();for(int i = 1;i <= n;++i){int x = read();work(x);}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/wyxdrqc/p/11374186.html

[JSOI2009]瓶子和燃料相关推荐

  1. BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】

    2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1326  Solved: 815 [Submit][St ...

  2. bzoj 2257: [Jsoi2009]瓶子和燃料(裴蜀定理)

    2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1342  Solved: 823 [Submit][St ...

  3. bzoj 2257[Jsoi2009]瓶子和燃料 数论/裴蜀定理

    题目 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1< ...

  4. [luogu4571 JSOI2009] 瓶子和燃料 (数论)

    传送门 Solution 题目说的很迷,但可以发现两个瓶子互相倒最少是容积的gcd 那么题目就转化为求其中选k个瓶子gcd的最大值,这个可以分解因数,枚举因数得到 Code //By Menteur_ ...

  5. BZOJ 2257: [Jsoi2009]瓶子和燃料

    题目大意: 有n个数,选择k个数,最大化这些数通过加减能得到的最小的正整数. 题解: 这些数通过加减能得到的最小的数为他们的最大公约数. 题目要求n个数字中选择k个使得他们的最大公约数最大. 枚举所有 ...

  6. [JSOI2009]瓶子和燃料【数论】

    Pro QwQ Sol 手推几组数据就可以发现:答案即为k个数的gcd 所以爆搜出k个出,再暴力求gcd可以过部分数据-- 正解好像和裴蜀定理有关:把n个数的因子都求出来,找出满足因子个数大于等于k的 ...

  7. bzoj2257瓶子与燃料——最大公约数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2257 可以知道最终能够导出的燃料一定是瓶子容量的gcd的倍数,所以此题转化为求n个数中k个数 ...

  8. (裴蜀定理)ax + by = m 有解,当且仅当 m 是 gcd(a,b) 的倍数

    简介:在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理.裴蜀定理得名于法国数学家艾蒂安·裴蜀,说明了对任             何整数a.b和它们的最大公约数d,关于未知数x和y的线性丢 ...

  9. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

  10. CodeChef DGCD Dynamic GCD

    CodeChef题面 Time limit 210 ms Code length Limit //内存限制也不说一下,真是的-- 50000 B OS Linux Language limit C, ...

最新文章

  1. [IS-IS] IS-IS路由协议的基本知识及配置
  2. 聊聊数据库和缓存同步机制
  3. 计算机网络技术中的NAT,计算机网络技术中的NAT-2.ppt
  4. 利用github搭建个人maven仓库
  5. Android --- Binary XML file line2 Binary XML file line 2 Error inflating class unknown
  6. 全球及中国一次性造口袋行业发展前景预测及投资价值分析报告2021-2027年版
  7. 重构客户注册-基于ActiveMQ实现短信验证码生产者
  8. java调用c dll,指针参数和结构体参数搞定
  9. xctf php序列化,xctf一道反序列化题
  10. Spark面试题梳理
  11. ip pssql 登录写法_plsql 连接远程服务器数据库无法登录
  12. PDF怎么转换成长图
  13. golang 撤回_golang 连接mongoDB的方法示例
  14. CSS学习笔记7—盒子模型
  15. C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本
  16. rfid考勤系统mysql_通过使用Arduino将Python发送RFID数据到MySQL服务器的考勤系统
  17. python编写一个程序、判断用户输入的数是正数还是负数_java试编写一程序,可由键盘输入一个整数,然后判断该数值是正数还是负数.(if)...
  18. 2021跨保计算机实录(浙大软院、中山计院)
  19. sketch(三)--插件
  20. 疫情之下的企业该如何生存?

热门文章

  1. No package ‘libmarco-private‘ found
  2. 文字处理技术:终于明白了压缩要怎么做
  3. apt install:文件尺寸不符(25294 != 25412)。您使用的镜像正在同步中?
  4. 全网首发:为什么依赖库编译时加了-fPIC,还是提示依赖库要使用-fPIC?
  5. 保留正常工作的环境,等自己的搞好后再替换
  6. cygwin安装之后,可以复制到其他机器使用
  7. 百叶窗叶片锋利,不安全
  8. cygwin下载可以用的服务器
  9. 测试的重要性:蚊子让快递柜的触摸失灵
  10. iOS 监听锁屏/解锁事件