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;
}

浙公网安备 33010602011771号