首页 > 其他分享 >CF371B 题解

CF371B 题解

时间:2022-08-26 02:02:16浏览次数:113  
标签:play return GCD CF371B int 题解 cnt

前言

题目传送门!

更好的阅读体验?

这题显然没有蓝的难度。

其他题解代码不好看,而且没有讲清楚,那我补一发吧。

题目简述

有两个数 \(a\),\(b\),每次操作可以给 \(a\) 或 \(b\) 除以 \(2\),\(3\),\(5\)。

问最少操作数使得 \(a = b\)。无解输出 \(-1\)。

思路

设最后,两数都需要等于 \(x\)。

即,\(x\) 满足 \(x \mid a, b\)。

想要得到最少操作数,则 \(x\) 要尽可能大

你想到了什么?

对,\(x\) 取 \(a\) 和 \(b\) 的最大公因数即可!

我们可以令 \(a' = a \div x\),\(b' = b \div x\)。

所以,答案即为 \(a'\) 与 \(b'\) 的因数 \(2\),\(3\),\(5\) 的总数。

需要注意,如果 \(a'\) 或 \(b'\) 不只有这三个因数,说明没法吃完。输出 \(-1\) 即可。

代码

我们可以利用函数,来是码风美观。

#include <cstdio>
#include <iostream>
using namespace std;
int gcd(int x, int y)
{
	if (y == 0) return x;
	return gcd(y, x%y);
}
int cnt;
void play(int &x, int k)
//将 x 的所有因数 k 约掉。 
//x 前面的 & 符号可以使程序更改 x 的值。
//如果不加,x 就默认不改变。 
{
	while (x != 0 && x % k == 0) x /= k, cnt++;
}
void X()
{
	printf("-1");
	exit(0);
	//怎么在主函数外结束程序? 
	//使用 exit(0) 而非 return 0 即可。 
}
int main()
{
	int a, b;
	scanf("%d%d", &a, &b);
	int GCD = gcd(a, b);
	a /= GCD, b /= GCD;
	
	play(a, 2), play(a, 3), play(a, 5);
	if (a != 1) X();
	
	play(b, 2), play(b, 3), play(b, 5);
	if (b != 1) X();
	
	printf("%d", cnt);
	return 0;
}

希望能帮助到大家!

首发:2022-06-26 11:15:35

标签:play,return,GCD,CF371B,int,题解,cnt
From: https://www.cnblogs.com/liangbowen/p/16622891.html

相关文章

  • P8410 题解
    前言题目传送门!更好的阅读体验?本次比赛第二题,好像没有人抢题解,那我来一发。思路还是挺巧妙的。\(\texttt{10pts}\)思路深搜求解即可。最坏情况,时间复杂度\(O(n!......
  • CF722B 题解
    前言题目传送门!更好的阅读体验?这是一道简单的字符串练手题。思路每次暴力计数,是否为元音。最后判断是否满足题意即可。重点是字符串读入问题。由于字符串读入部分......
  • AT1330 题解
    前言题目传送门!更好的阅读体验?这一题内部比赛时考到了,个人觉得是一道二分答案好题。本题时间很宽松,导致\(O(n\log^2n)\)的代码可以跑过去。但是,我内部比赛的时限......
  • P2130 题解
    前言题目传送门!更好的阅读体验?本题是练习bfs的好题。思路结合代码进行思路讲解。首先是读入部分,我们可以用bool存下地图,节省空间开销。需要注意,数据比较烂,起始......
  • CF1635B 题解
    题目传送门!更好的阅读体验?这题显然可以使用贪心的思想解决。由于头和尾一定不用更改,所以只需从\(a_2\)枚举到\(a_{n-1}\)。贪心原则下,我们更改的数应该要与相邻的......
  • P8295 题解
    ###前言题目传送门\(\color{red}{see}\space\color{green}{in}\space\color{blue}{my}\space\color{purple}{blog}\)这题并不困难,代码也挺短的,题目理解稍有困难。......
  • 题解 UVA10869 Brownie Points II
    题意平面上有若干点,\(\text{stan}\)通过一个点划了一条直线,\(\text{ollie}\)通过在这条直线上的点作了一条垂线,那么平面被分成\(4\)个象限,\(\text{stan}\)获得的分数......
  • idea导入依赖maven的dependenci列表报红问题解决
    打开一个idea的pom文件时,明明仓库有相关依赖,并且maven的仓库配置没有错误,但是maven的dependencies列表却报红,我们可以让idea每次加载pom文件的依赖不从idea的缓存中读取,而......
  • npm 报错:npm ERR! Maximum call stack size exceeded 超过最大栈问题解决方案
       错误的原因,npm版本问题;解决办法:   1、更新到最新版本:npminstallnpm-g  要记住全局更新2、回退版本:[email protected] ......
  • 蔚来杯2022牛客暑期多校训练营10 题解
    D.MiReDoSiLa?SoFa![NOI2016]优秀的拆分原题。枚举周期\(k\),并将位置为\(k\)的倍数的点设为关键点。枚举相邻两个点\(i,i+k\),并求出\(lcp(S[i...n],S[i+k......