牛客网 ACM 竞赛 18839 - 番茄炒蛋
番茄炒蛋
链接: https://ac.nowcoder.com/acm/contest/18839/1047
来源: 牛客网
时间限制: C/C++ 1秒,其他语言2秒
空间限制: C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
Chranos是个数学天才。
一天,有一个可爱的小女孩追求Chranos,他知道Chranos最喜欢当且仅当总质量为K克的时候的番茄炒蛋了。她希望通过美食俘获Chranos的胃,这样就一定可以和他在一起了吧!虽然小女孩有无限数量的食材,但是数学王国的番茄和蛋非常特殊,他们的质量分别为N克和M克。为了表现一颗完整的心、表达充足的爱意,所有的食材必须被用完。N和M都是正整数且互素,制作过程中既不会凭空增加质量,也不会凭空消失质量。
Chranos不希望小女孩打扰他学数学。他发现,并不是所有番茄炒蛋都是可以被制作出来的。他想找出最大的不可以被制作出的总质量K来拒绝小女孩,这样Chranos就可以永远和数学在一起了!
输入描述:
第一行为正整数N和M(2 ≤ N, M ≤ 50000)。
输出描述:
输出最大的不可以被制作出的总质量K。
示例1
输入
2 3
输出
1
解题思路:
根据题意可知,对于给定的N和M,要制作出总质量为K的番茄炒蛋,需要满足以下条件:
- K必须是N和M的倍数
- K不能大于N+M
由于N和M互素,所以对于任意正整数K,K都可以表示为N的倍数和M的倍数的和。即存在x和y,使得K = xN + yM。
根据以上条件,我们可以通过遍历K的值,从N+M-1到1,依次判断K是否满足以上条件。如果找到一个不满足条件的K,则输出该K,否则输出1。
具体步骤如下:
- 读取输入的N和M。
- 初始化变量K为N+M-1。
- 从K开始依次递减,判断K是否满足以上条件: a. 如果K是N和M的倍数,则继续判断下一个K。 b. 如果K大于N+M,则继续判断下一个K。 c. 如果K不满足以上两个条件,则输出K,并结束循环。
- 如果循环结束仍未找到不满足条件的K,则输出1。
下面是实现该算法的C++代码:
#include <iostream>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
int K = N + M - 1;
while (K > 0) {
if (K % N == 0 && K % M == 0 && K <= N + M) {
cout << K << endl;
return 0;
}
K--;
}
cout << 1 << endl;
return 0;
}
时间复杂度分析:
由于需要遍历从N+M-1到1的所有数,所以时间复杂度为O(N+M)。
原文地址: http://www.cveoy.top/t/topic/2g8 著作权归作者所有。请勿转载和采集!