807C - Success Rate - CodeForces Solution


binary search math *1700

Please click on ads to support us..

C++ Code:

#include<iostream>

using namespace std;

typedef long long ll;
ll x, y, p, q;

int gcd(int a, int b)
{
	while (b ^= a ^= b ^= a %= b);
	
	return a;
}


void simplify() {
	int tmp = gcd(x, y);
	x /= tmp;
	y /= tmp;
}

ll adjust() {
	ll num = 0;
	ll tmp1 = p, tmp2 = q;
	if (x * q<  y* p )
	{
		if (q<y)
		{ 
			p = (y / q ) * p;
			q = (y / q ) * q;
			if (q<y)
			{
				q += tmp2;
				p += tmp1;
			}
		}
		if (p-x>q-y)
		{
			int need = p - x - q + y;
			need = need / (tmp2 - tmp1);
			p += need * tmp1;
			q += need * tmp2;
			if (p-x>q-y)
			{
				p += tmp1;
				q += tmp2;
			}
		}
		
	}
	else
	{
		if (p < x)
		{
			q = (x / p ) * q;
			p = (x / p ) * p;
			if (p<x)
			{
				q += tmp2;
				p += tmp1;
			}
		}
		if (x - p > q - y)
		{
			int need = x - p - q + y;
			need = need / (tmp2 - tmp1);
			p += need * tmp1;
			q += need * tmp2;
			if (x - p > q - y)
			{
				p += tmp1;
				q += tmp2;
			}
		}
	}
	num = q - y;
	return num;
}



int main() {
	ios::sync_with_stdio(false);
	int t;
	cin >> t;

	for (int i = 0; i < t; i++)
	{
		cin >> x >> y >> p >> q;
		if (p == 0)
		{
			if (x == 0)
			{
				cout << 0<<endl;
				continue;
			}
			cout << -1 << endl;
			continue;
		}
		if (p == q)
		{
			if (x != y)
			{
				cout << -1 << endl;
			}
			else
			{
				cout << 0 << endl;
			}
			continue;

		}
		if (y == 0)
		{
			cout << q << endl;
			continue;
		}
		if (x * q == y * p)
		{
			cout << 0 << endl;
			continue;
		}
		else
		{
			x = adjust();
			cout << x << endl;
		}
	}
}
    	   	   		 		   		 	 		  	
 	    	  			 	  		    			  				


Comments

Submit
0 Comments
More Questions

1002. Find Common Characters
1602A - Two Subsequences
1555A - PizzaForces
1607B - Odd Grasshopper
1084A - The Fair Nut and Elevator
1440B - Sum of Medians
1032A - Kitchen Utensils
1501B - Napoleon Cake
1584B - Coloring Rectangles
1562B - Scenes From a Memory
1521A - Nastia and Nearly Good Numbers
208. Implement Trie
1605B - Reverse Sort
1607C - Minimum Extraction
1604B - XOR Specia-LIS-t
1606B - Update Files
1598B - Groups
1602B - Divine Array
1594B - Special Numbers
1614A - Divan and a Store
2085. Count Common Words With One Occurrence
2089. Find Target Indices After Sorting Array
2090. K Radius Subarray Averages
2091. Removing Minimum and Maximum From Array
6. Zigzag Conversion
1612B - Special Permutation
1481. Least Number of Unique Integers after K Removals
1035. Uncrossed Lines
328. Odd Even Linked List
1219. Path with Maximum Gold