CF1875C Jellyfish and Green Apple 题解

CF1875C Jellyfish and Green Apple

我们首先把整块的分完,然后处理剩余的分数块数。

由于我们只能劈成两半,所以约分之后分数的分母只能为 2 的幂,不能包含其他质因数。如果包含,直接输出 -1

我们每次把剩下的块全部劈成两半,统计刀数,直到块数足够分给 m 个人。分给那些人后,让块数减去 m,在重复这个过程,直到最后只剩 0 块。

#include <bits/stdc++.h>
using namespace std;
long long t,n,m;
long long gcd(long long x,long long y)
{
	if(y==0)return x;
	else return gcd(y,x%y); 
}

int main()
{
	scanf("%lld",&t);
	while(t--)
	   {
	   	scanf("%lld%lld",&n,&m);
	   	long long num=n%m,ans=0,c=m,d=n%m,k=gcd(c,d);
	   	c/=k;
		while(c%2==0)c/=2;
	   	if(c>1&&n%m!=0)
	   	    {
	   	   	printf("-1\n");
	   	   	continue;
			}
		while(num!=0)
		   {
		   	while(num<m)ans+=num,num*=2;
			num-=m;
		   }
		printf("%lld\n",ans);
	   }
    return 0;
}
posted @   w9095  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示