Jellyfish and apple
https://www.luogu.com.cn/problem/CF1875C
这道题使用的是贪心
首先 对于多于m的苹果个数,可以直接分给m个人,所以先把n对m取模,然后考虑剩下的苹果
然后考虑不能分的情况
如果求出m和n的最大公约数,把m和n同时除以最大公约数,那么得到的人数应该是2k,否则的话就说明人数中一定是有某个非2的倍数的因子是苹果数没有的,这样的话苹果数不管怎么翻倍都翻不出人数
那么对于剩下的情况,就把苹果数不断地翻倍,去掉够用的苹果就行
这里记这道题主要是想说,去掉够用的苹果的时候直接取模就行了,为什么一开始要那么傻还设一个循环在遍历……
#include <bits/stdc++.h>
using namespace std;
int t = 0;
long long n,m;
long long num = 0;
inline int lowbit(int x){return x&(-x);}
int main () {
int i = 2;
scanf("%d" ,&t);
for(int o = 1;o <= t; o++) {
scanf("%lld %lld" ,&n,&m);
if(lowbit(m / __gcd(n,m)) != m / __gcd(n,m)){
printf("-1\n");
continue;
}
n = n % m;
while(n != 0) {
num += n;
n = n * 2;
n = n % m;
}
printf("%lld\n" ,num);
num = 0;
}
return 0;
}
标签:取模,Day6,long,int,寒假,苹果,集训,这道题
From: https://www.cnblogs.com/Crazyman-W/p/17976528