Codeforces Round #730 div.2 A-E题解

Posted 欣君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #730 div.2 A-E题解相关的知识,希望对你有一定的参考价值。

视频讲解:BV19g411u7P6

A. Exciting Bets

题目大意

给定整数 a , b ( 0 ≤ a , b ≤ 1 0 18 ) a,b(0 \\leq a,b \\leq 10^{18}) a,b(0a,b1018) ,可以对其修改任意次数,使得 g c d ( a , b ) gcd(a,b) gcd(a,b) 最大。求修改后的 g c d ( a , b ) gcd(a,b) gcd(a,b) 与最小修改次数。
每次修改时,可以将 a , b a,b a,b 都增加 1 1 1 ,或减少 1 1 1 (只有当 a , b > 0 a,b>0 a,b>0 时才能减少)。
g c d ( a , b ) gcd(a,b) gcd(a,b) 可以无穷大,则输出 “0 0” 。
x ≥ 0 x\\geq 0 x0 时,认为 g c d ( x , 0 ) = x gcd(x,0)=x gcd(x,0)=x

题解

a = b a=b a=b ,则 g c d ( a , b ) gcd(a,b) gcd(a,b) 可以无穷大。反之,最大的 g c d ( a , b ) gcd(a,b) gcd(a,b) ∣ a − b ∣ |a-b| ab
证明:
设所有操作后, a , b a,b a,b 增加了 x x x ,变为 a + x , b + x a+x,b+x a+x,b+x g c d ( a + x , b + x ) = g gcd(a+x,b+x)=g gcd(a+x,b+x)=g ,则
a + x = k 1 ∗ g a+x=k_1*g a+x=k1g

b + x = k 2 ∗ g b+x=k_2*g b+x=k2g

a − b = ( k 1 − k 2 ) g a-b=(k_1-k_2)g ab=(k1k2)g

可得 g g g a − b a-b ab 的因子,最大就是 ∣ a − b ∣ |a-b| ab ,证毕。

x ≥ 0 x \\geq 0 x0 ,则 x = ⌊ a + g − 1 g ⌋ ⋅ g − a x=\\lfloor \\frac{a+g-1}{g}\\rfloor \\cdot g -a x=ga+g1ga
x < 0 x < 0 x<0 ,则 ∣ x ∣ = a − ⌊ a g ⌋ ⋅ g |x|=a- \\lfloor \\frac{a}{g} \\rfloor \\cdot g x=agag
最小步数为其中的较小值。

参考代码

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

int main()
{
	ll T,a,b,g,ad1,ad2;
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld%lld",&a,&b);
		if(a==b)
		{
			printf("0 0\\n");
			continue;
		}
		g=abs(a-b);
		ad1=(a+g-1)/g*g-a;
		ad2=a-a/g*g;
		printf("%lld %lld\\n",g,min(ad1,ad2));
	}
}

B. Customising the Track

题目大意

n ( 1 ≤ n ≤ 2 ⋅ 1 0 5 ) n(1 \\leq n \\leq 2 \\cdot 10^5) n(1n2105) 个轨道,编号从 1 1 1 n n n 。第 i i i 个轨道上有 a i a_i ai 辆车。
你可以执行任意次修改,每次修改可以将一辆车移动到另一个轨道上。
求修改后的最小 ∑ i = 1 n ∑ j = = i + 1 n ∣ a i − a j ∣ \\sum_{i=1}^n{\\sum_{j==i+1}^{n}{|a_i-a_j|}} i=1nj==i+1naiaj

题解

观察表达式,易得 a i a_i ai 尽可能平均分布时最优。
s u m = ∑ i = 1 n a i sum=\\sum_{i=1}^n{a_i} sum=i=1nai 不一定能等分为 n n n 份。设每个轨道上有 a v e = ⌊ s u m n ⌋ ave=\\lfloor \\frac{sum}{n} \\rfloor ave=nsum 辆车,则还剩余 l a s t = s u m − a v e ⋅ n last=sum-ave \\cdot n last=sumaven 辆车。
l a s t last last 辆车放置在任意轨道中,每个轨道放置一辆,则有 l a s t last last 个轨道有 a v e + 1 ave+1 ave+1 辆车,有 n − l a s t n-last nlast 个轨道有 a v e ave ave 辆车。
答案 a n s = l a s t ⋅ ( n − l a s t ) ans=last \\cdot (n-last) ans=last(nlast)

参考代码

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

int main()
{
	ll T,n,x,sum,i,last,ans;
	scanf("%lld",&T);
	while(T--)
	{
		scanf("%lld",&n);
		sum=0;
		for(i=1;i<=n;i++)
		{
			scanf("%lld",&x);
			sum+=x;
		}
		last=sum-sum/n*n;
		ans=last*(n-last);
		printf("%lld\\n",ans);
	}
}

C. Need for Pink Slips

题目大意

有三种奖品,分别简称为C奖品,M奖品,P奖品。每次获取奖品时,会随机从中获得一项,概率分别为 c , m , p ( 0 < c , m , p < 1 ,

以上是关于Codeforces Round #730 div.2 A-E题解的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #730 div.2 A-E题解

Codeforces Round #730 (Div. 2) A. Exciting Bets(同余)

Codeforces Round #730 (Div. 2) C. Need for Pink Slips(概率,模拟....)

Codeforces Round #730 (Div. 2) D. RPD and Rap Sheet (交互,从easy到hard)

Codeforces Round #705 (Div. 2)

Codeforces Round #774 (Div. 2)