Codeforces Round 901 (Div. 2)
1.Atcoder Beginner Contest 3122.Educational Codeforces Round 152 (Rated for Div. 2)3.Codeforces Round 889 (Div. 2)4.Codeforces Round 888 (Div. 3)5.Codeforces Round 847 (Div. 3)6.Codeforces Round 890 (Div. 2)7.Codeforces Round 892 (Div. 2)8.Codeforces Round 893 (Div. 2)9.Educational Codeforces Round 15310.Codeforces Round 891 (Div. 3)11.Codeforces Round 894 (Div. 3)12.Educational Codeforces Round 154 (Rated for Div. 2)13.Codeforces Round 896 (Div. 2)14.Codeforces Round 855 (Div. 3)15.codeforces round 895 (div. 3)16.Codeforces Round 900 (Div. 3)
17.Codeforces Round 901 (Div. 2)
18.Codeforces Round 903 (Div. 3)C
题意:
给你n个青苹果要分给m个人,不够分的时候可以平均切一刀,问最少且多少刀可以让每个人得到的苹果一样多
思路:
贪心的想肯定是先把一整个苹果分给大家,这样就不用切了,所以 n = n % m, 多出来的苹果再切完分
最少要切成lcm(n, m)
份才能均分,由于每次都只能对半切,所以lcm(n, m) / n
一定是
平均下来一个人lcm(n, m) / m
片,因为每切一刀果子片数+1,那么m个人都有 刀数 * m片
inline void solve()
{
int n, m; cin >> n >> m;
n = n % m;
if (n == 0)
{
cout << 0 << endl;
return;
}
LL lcm = 1LL * n * m / gcd(n, m); // 最少要有lcm片才能均分给m个人
LL a = lcm / n; // 每个GreenApple应该切成的片数
LL b = lcm / m; // 每个人应该得到的片数
if ((a & -a) != a)
{
cout << -1 << endl;
return;
}
int cnt = 0;
while (b)
{
b = b - (b & -b);
cnt++;
}
cout << 1LL * cnt * m - n << endl;
}
本文作者:自动机
本文链接:https://www.cnblogs.com/monituihuo/articles/17744934.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步