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(0≤a,b≤1018) ,可以对其修改任意次数,使得
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
x≥0 时,认为
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|
∣a−b∣ 。
证明:
设所有操作后,
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=k1∗g
b + x = k 2 ∗ g b+x=k_2*g b+x=k2∗g
a − b = ( k 1 − k 2 ) g a-b=(k_1-k_2)g a−b=(k1−k2)g
可得 g g g 是 a − b a-b a−b 的因子,最大就是 ∣ a − b ∣ |a-b| ∣a−b∣ ,证毕。
若
x
≥
0
x \\geq 0
x≥0 ,则
x
=
⌊
a
+
g
−
1
g
⌋
⋅
g
−
a
x=\\lfloor \\fraca+g-1g\\rfloor \\cdot g -a
x=⌊ga+g−1⌋⋅g−a ;
若
x
<
0
x < 0
x<0 ,则
∣
x
∣
=
a
−
⌊
a
g
⌋
⋅
g
|x|=a- \\lfloor \\fracag \\rfloor \\cdot g
∣x∣=a−⌊ga⌋⋅g ;
最小步数为其中的较小值。
参考代码
#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(1≤n≤2⋅105) 个轨道,编号从
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=1n∑j==i+1n∣ai−aj∣ 。
题解
观察表达式,易得
a
i
a_i
ai 尽可能平均分布时最优。
但
s
u
m
=
∑
i
=
1
n
a
i
sum=\\sum_i=1^na_i
sum=∑i=1nai 不一定能等分为
n
n
n 份。设每个轨道上有
a
v
e
=
⌊
s
u
m
n
⌋
ave=\\lfloor \\fracsumn \\rfloor
ave=⌊nsum⌋ 辆车,则还剩余
l
a
s
t
=
s
u
m
−
a
v
e
⋅
n
last=sum-ave \\cdot n
last=sum−ave⋅n 辆车。
将
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
n−last 个轨道有
a
v
e
ave
ave 辆车。
答案
a
n
s
=
l
a
s
t
⋅
(
n
−
l
a
s
t
)
ans=last \\cdot (n-last)
ans=last⋅(n−last)
参考代码
#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
,
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)