LuoguP7679 [COCI2008-2009#5] JABUKA 题解
Content
Mirko 拥有 \(R\) 个红苹果和 \(G\) 个绿苹果,他想把他分给若干个朋友,使得所有朋友分得的红苹果个数和绿苹果个数都一样。现给定 \(R,G\),请你帮助 Mirko 找到所有的分配苹果的方案。可以证明一定存在分配苹果的方案。
数据范围:\(1\leqslant R,G\leqslant 10^9\)。
Solution
供题的时候也没有想到会有复杂度 \(\mathcal O(\gcd\{R,G\})\) 的复杂度过去……于是随手造了个数据把错解卡了,顺便来水水题解。
我们发现,朋友的个数必然是 \(R,G\) 的公因数,所以我们不妨先求出 \(\gcd\{R,G\}\),然后在修改了数据之后,直接枚举到 \(\gcd\{R,G\}\) 肯定是不可行的了。那怎么办呢?我们不妨想想,如果 \(x\) 是一个数 \(n\) 的因子,那么 \(\dfrac{n}{x}\) 肯定也是这个数的因子。所以我们不妨以 \(\left\lfloor\sqrt{\gcd\{R,G\}}\right\rfloor\) 为上界枚举朋友个数,一旦找到了一个因子 \(i\) 就把朋友数分别为 \(i\) 和 \(\dfrac{\gcd\{R,G\}}{i}\) 的方案全加入答案中,这样既可以保证面面俱到,又可以保证时间不会超限。
又由于这道题目要求我们要按照朋友个数升序排列,于是我们就可以开一个 vector,把答案计入到 vector 之后直接按照朋友个数升序排序输出就好了。具体实现见代码。
Code
struct node {
int p, ri, gi;
bool operator < (const node& t) const {return p < t.p;}
};
vector<node> ans;
int main() {
int r = Rint, g = Rint, n = __gcd(r, g);
F(int, i, 1, (int)sqrt(n))
if(!(n % i)) {
ans.push_back((node){i, r / i, g / i});
if(i != n / i) ans.push_back((node){n / i, r / (n / i), g / (n / i)});
}
sort(ans.begin(), ans.end());
F(int, i, 0, (int)ans.size() - 1) printf("%d %d %d\n", ans[i].p, ans[i].ri, ans[i].gi);
return 0;
}
LuoguP7679 [COCI2008-2009#5] JABUKA 题解的更多相关文章
- 1642: 【USACO】Payback(还债)
1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...
- 题解 P1951 【收费站_NOI导刊2009提高(2)】
查看原题请戳这里 核心思路 题目让求最大费用的最小值,很显然这道题可以二分,于是我们可以二分花费的最大值. check函数 那么,我们该怎么写check函数呢? 我们可以删去费用大于mid的点以及与其 ...
- 【题解】 Luogu P4312 / SP4155 [COCI 2009] OTOCI / 极地旅行社
原题地址:P4312 [COCI 2009] OTOCI / 极地旅行社/SP4155 OTOCI - OTOCI lct入门难度的题,十分弱智(小蒟蒻说lct是什么,能吃吗?) bridge操作判联 ...
- [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)
[BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...
- BZOJ2038:[2009国家集训队]小Z的袜子——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找 ...
- 洛谷 P1950 长方形_NOI导刊2009提高(2) 题解
P1950 长方形_NOI导刊2009提高(2) 题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形. 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为n,m.小明讲这张纸看成是由 ...
- HDU100题简要题解(2000~2009)
前言(废话): 从11月6号到11月20号,断断续续做了有三个星期,总算整完了,之后会慢慢整理汇总到这里 中间部分用到数学知识的十几道题边学边做直接把我这个数学菜鸟做到怀疑人生 11.6~11.10又 ...
- [题解] 2038: [2009国家集训队]小Z的袜子(hose)
莫队,卡常数 题目地址 思路 设\(\text{Vis[i]}\)为元素\(\text{i}\)在区间\(\text{[L,R]}\)的出现次数 考虑区间\(\text{[L,R]}\)和元素\(\t ...
- 题解 P1944 最长括号匹配_NOI导刊2009提高(1)
栈,模拟 把每个元素逐个入栈 如果和栈顶元素匹配,那么一块弹出去,同时标记这里是可匹配的. 取出连续的,最长的可匹配的序列即可. #include <iostream> #include ...
随机推荐
- 【Tool】IDEA功能--SVN和Git
IDEA功能--SVN和Git 2019-11-08 21:12:22 by冲冲 1.IDEA的SVN (1)提交项目代码到SVN服务器 ① 指定不用上传的目录 ② 设置项目上传的路径 SVN服务 ...
- 测试平台系列(85) 把redis运用到实战中
大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们让支持了前置条件 ...
- 『学了就忘』Linux文件系统管理 — 57、Linux文件系统介绍
目录 1.了解硬盘结构(了解即可) (1)硬盘的逻辑结构 (2)硬盘接口 2.Linux文件系统介绍 (1)Linux文件系统的特性 (2)Linux常见文件系统 3.整理一下对文件系统的认识 在了解 ...
- 详解在Linux中安装配置MongoDB
最近在整理自己私人服务器上的各种阿猫阿狗,正好就顺手详细记录一下清理之后重装的步骤,今天先写点数据库的内容,关于在Linux中安装配置MongoDB 说实话为什么会装MongoDB呢,因为之前因为公司 ...
- CF1575G GCD Festival
\(\sum\sum gcd(i,j) \times gcd(a_i,a_j)\) 考虑枚举这个 \(gcd(i,j)\) . \(\sum_d \varphi(d)\sum_{i|d}\sum_{j ...
- Python基础笔记3
高级特性 代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.代码越少,开发效率越高. 1.切片 切片(Slice)操作符,取一个list或tuple的部分元素非常常见. 列表 L = ...
- EXCEL-时间
1.时间的3中输入方法: (1)手打输入: (2)快捷键:[快,方便,且结果跟手打一样,不会改变][Ctrl+;]->年月日 [Ctrl+:]->时分秒(我这里是这样的效果) (3) ...
- 36-Same Tree
Same Tree My Submissions QuestionEditorial Solution Total Accepted: 126116 Total Submissions: 291884 ...
- CentOS6安装Zabbix(RPM包)
1. 系统环境状态 2. 安装zabbix4.0 3. 安装mysql+apache+php环境 4.配置mysql 5.配置zabbix-server 6. 配置apache 7. web安装 1 ...
- LATEX公式语法
see how any formula was written in any question or answer, including this one, right-click on the ex ...