首页 > 其他分享 >Codeforces Round 901 (Div. 2) C. Jellyfish and Green Apple (位运算)

Codeforces Round 901 (Div. 2) C. Jellyfish and Green Apple (位运算)

时间:2023-10-07 20:33:07浏览次数:44  
标签:901 Apple Codeforces Green Div Round Jellyfish

Codeforces Round 901 (Div. 2) C. Jellyfish and Green Apple
//思路:浮点数转二进制,a/b的结果为  gcd(a,b)*最简分式(n/m)的结果
//苹果能分的前提是人数得是一个2的次幂数,通过切割只能分为形同0.001的二进制小数
//a/b的二进制如果在从左到右的sp位为 1 ,则需要切割到这个情况
//一个苹果切割到这一位共用 2^(sp-1)-1 刀 , 得到 2^(sp) 份这样的苹果
//则要加上 (m /(1 << sp)) * ((1 << sp) - 1) 刀
//结果乘上先前优化的gcd

#define int long long
#define ld long double

using namespace std;

int gcd(int a, int b)
{
	if (b)return gcd(b, a % b);
	else return a;
}

void op()
{
	int n, m;
	cin >> n >> m;

	if (n % m == 0)cout << 0 << endl;
	else
	{
		int tmp = m;
		int k = gcd(n, m);
		n /= k;
		m /= k;

		if (m % 2)
		{
			cout << -1 << endl;;
			return;
			
		}
		int fg = 0;

		int kk = m;
		while (kk)
		{
			if (kk & 1)fg++;
			kk >>= 1;
			if (fg > 1)
			{
				cout << -1 << endl;
				return;
			}
		}

		bool st = true;
		int sp = 1,ans=0;

		while (st&&sp<=33)
		{
			if (((n << sp)/m) & 1)
			{
				ans += (m / ((int)1 << sp)) * (((int)1 << sp) - 1);
			}
			if ((n << sp) % m == 0)
			{
				st = false;
			}
			sp++;
		}

		cout << ans * k << endl;
	}
}

signed main()
{
	int t;
	cin >> t;
	while (t--)op();

	return 0;

}

标签:901,Apple,Codeforces,Green,Div,Round,Jellyfish
From: https://www.cnblogs.com/ikunhuaji/p/17747412.html

相关文章

  • Apple开发_swift版本发展进化史
    Swift1.02014-08-18Swift1.12014-10-16Swift1.22015-04-08Swift2.02015-09-16Swift2.12015-10-20Swift2.22016-03-21Swift3.02016-09-13Swift3.0.12016-10-27Swift......
  • Codeforces Global Round 2
    C题结论就是每行每列不同的个数必须是偶数。D题首先注意到对于长度相同的询问,答案都是一样的。同时相同的s可以直接丢掉。那么我们将s排序之后,将相邻的差再进行排序,然后将询问从小到大处理。相当于是将这些段拼接在一起。#include<cstdio>#include<algorithm>#include<cstr......
  • 【计算几何】codeforces上面的一点简简单单的计算几何入门题
    开篇碎碎念我真的好喜欢开篇碎碎念啊(可恶真的是太话痨啦)最近有在cf上面写写题,唔不过还没上百题,过两天就可以写百题纪念啦,也还没上青,陌陌菜菜,陌陌在努力变强捏。cf1850GTheMorningStartag:用map进行维护,斜率与坐标的关系题目链接:G.TheMorningStar题意:找到一个点,使另一......
  • 「题解」Codeforces Round 883 (Div. 3)
    A.EscalatorConversationsProblem[题目](RudolphandCuttheRope)Sol&Code绳子长度大于钉子高度的要剪#include<bits/stdc++.h>typedeflonglongll;intmin(inta,intb){returna<b?a:b;}intmax(inta,intb){returna>b?a:b;}in......
  • 「题解」Codeforces Round 888 (Div. 3)
    A.EscalatorConversationsProblem题目Sol&Code签到#include<bits/stdc++.h>typedeflonglongll;intmin(inta,intb){returna<b?a:b;}intmax(inta,intb){returna>b?a:b;}intT,n,m,k,h;intmain(){scanf(......
  • 「题解」Codeforces Round 891 (Div. 3)
    A.ArrayColoringProblem题目Sol&Code只有数列的和为偶数时才符合要求,即有任意个偶数,偶数个奇数。将这些数分成两部分,发现两部分初始值\(0\)为偶数,偶数不会影响奇偶性,故需要偶数个奇数。#include<bits/stdc++.h>#defineN51typedeflonglongll;intmin(inta,......
  • CodeForces 814E An unavoidable detour for home 题解
    更好的阅读体验题意题目链接(洛谷翻译)给出\(n\)个点,和每个点的度\(d_i\)让你构造出一张无向图满足以下两条性质:点\(1\)到点\(i\)仅有唯一一条最短路。点\(1\)到点\(i\)的最短路长度大于等于点\(1\)到点\(i-1\)的最短路长度。求能构成满足条件的无向图......
  • P9019 [USACO23JAN] Tractor Paths P 题解
    Description有\(n\)个区间,第\(i\)个区间为\([l_i,r_i]\)。保证\(l_1<l_2<\cdots<l_n\)且\(r_1<r_2<\cdots<r_n\)。其中一部分区间是特殊的,输入会给定。如果第\(i\)个区间和第\(j\)个区间相交,那么\(i,j\)之间有一条边。保证\(1,n\)联通。给定\(Q\)组询问,每次......
  • P3901 数列找不同 【莫队】
    P3901数列找不同莫队:一种离线处理的优化暴力解法,时间复杂度在n*n^(1/2),会被卡常数,但是极为简单推荐视频:莫队算法点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;inta[N];intpos[N];structnode{ intl,r,k;}t[N];strings......
  • CodeForces 1864H Asterism Stream
    洛谷传送门CF传送门好题。考虑计算\(x\)落在\([1,n-1]\)的概率。设\(f_i\)为\(x\)经过\(i\)的概率,答案即为\(\sum\limits_{i=1}^{n-1}f_i\)。\(f\)有一个朴素的递推:\[f_i=\begin{cases}\frac{1}{2}(f_{i-1}+f_{\frac{i}{2}})&2\midi\\\fr......