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 @ 2025-02-14 18:30  w9095  阅读(38)  评论(0)    收藏  举报