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 题解的更多相关文章

  1. 1642: 【USACO】Payback(还债)

    1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...

  2. 题解 P1951 【收费站_NOI导刊2009提高(2)】

    查看原题请戳这里 核心思路 题目让求最大费用的最小值,很显然这道题可以二分,于是我们可以二分花费的最大值. check函数 那么,我们该怎么写check函数呢? 我们可以删去费用大于mid的点以及与其 ...

  3. 【题解】 Luogu P4312 / SP4155 [COCI 2009] OTOCI / 极地旅行社

    原题地址:P4312 [COCI 2009] OTOCI / 极地旅行社/SP4155 OTOCI - OTOCI lct入门难度的题,十分弱智(小蒟蒻说lct是什么,能吃吗?) bridge操作判联 ...

  4. [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)

    [BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...

  5. BZOJ2038:[2009国家集训队]小Z的袜子——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找 ...

  6. 洛谷 P1950 长方形_NOI导刊2009提高(2) 题解

    P1950 长方形_NOI导刊2009提高(2) 题目描述 小明今天突发奇想,想从一张用过的纸中剪出一个长方形. 为了简化问题,小明做出如下规定: (1)这张纸的长宽分别为n,m.小明讲这张纸看成是由 ...

  7. HDU100题简要题解(2000~2009)

    前言(废话): 从11月6号到11月20号,断断续续做了有三个星期,总算整完了,之后会慢慢整理汇总到这里 中间部分用到数学知识的十几道题边学边做直接把我这个数学菜鸟做到怀疑人生 11.6~11.10又 ...

  8. [题解] 2038: [2009国家集训队]小Z的袜子(hose)

    莫队,卡常数 题目地址 思路 设\(\text{Vis[i]}\)为元素\(\text{i}\)在区间\(\text{[L,R]}\)的出现次数 考虑区间\(\text{[L,R]}\)和元素\(\t ...

  9. 题解 P1944 最长括号匹配_NOI导刊2009提高(1)

    栈,模拟 把每个元素逐个入栈 如果和栈顶元素匹配,那么一块弹出去,同时标记这里是可匹配的. 取出连续的,最长的可匹配的序列即可. #include <iostream> #include ...

随机推荐

  1. HouseRobber II

    // // Created by Administrator on 2021/7/27. // #ifndef C__TEST01_HOUSEROBBER2_HPP #define C__TEST01 ...

  2. 【Java面试题】-- Java基本类型

    Java基本类型 2019-11-03  19:03:48  by冲冲 1.两个float型相减丢失精度,如何解决? 使用BigDemical装饰器模式 public class Test { pub ...

  3. Java ArrayList小记

    1.基本用法 ArrayList是一个泛型容器,新建ArrayList需要实例化泛型参数,比如: ArrayList<String> StrList = new ArrayList< ...

  4. Codeforces Round #683 (Div. 1) Solution

    A. Knapsack 猜个结论--先把所有的东西加起来,如果小于 \(\frac{1}{2}m\) 就输出不合法:如果在 \([\frac{1}{2}m, m]\)之间直接全部输出:若大于 \(m\ ...

  5. 如何使用scp在Linux服务器的后台传输文件?

    目录 一.上传 常规操作 建议 后台运行 二.下载 两台服务器间文件如何传输?对于小文件,可以先从Linux服务器传到window,再传到另一台服务器.对于大的文件,如测序数据.比对文件等.这样的方法 ...

  6. Perl调用和管理外部文件中的变量(如软件和数据库配置文件)

    编写流程时,有一个好的习惯是将流程需要调用的软件.数据库等信息与脚本进行分离,这样可以统一管理流程的软件和数据库等信息,当它们路径改变或者升级的时候管理起来就很方便,而不需要去脚本中一个个寻找再修改. ...

  7. Python Cheatsheet

    Comprehensive Python Cheatsheet Download text file, Buy PDF, Fork me on GitHub or Check out FAQ. Con ...

  8. 14-Reverse Integer

    思路: 先判定符号,整型范围[-2^32,2^32] 取余除10操作,依次进行,越界返回0 Reverse digits of an integer. Example1: x = 123, retur ...

  9. 8.Maximum Depth of Binary Tree

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  10. kubernetes 用到的工具及组件

    kubernetes 用到的工具及组件,将所有的组件下载后放到/usr/local/bin目录下(记得chmod a+x /usr/local/bin/*).所有的组件,原则上都用最新的,如果遇到不支 ...