Codeforces Round#722 div.1+div.2题解
Posted 欣君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round#722 div.1+div.2题解相关的知识,希望对你有一定的参考价值。
div.2 视频讲解:BV1b44y1z7Xs
div.1 视频讲解:BV1CN411Z7vP
div.2-A. Eshag Loves Big Arrays
题目大意
给定序列 a a a ,每次可以选择其中一些数,删除其中大于这些数平均值的数,求最多可以删除多少数。
题解
每次选择最小的数 x x x 和其他任意大于 x x x 的数 y y y ,则必定可以删除 y y y。因此最后只剩下最小的数不会被删除。
参考代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN=110;
int a[MAXN];
int main()
{
int T,n,i,ans;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
ans=n;
for(i=1;i<=n;i++)
{
if(a[i]==a[1])
ans--;
}
printf("%d\\n",ans);
}
}
div.2-B. Sifid and Strange Subsequences
题目大意
定义一个序列 ( b 1 , b 2 , . . . , b k ) (b_1,b_2,...,b_k) (b1,b2,...,bk) 是奇怪的,当其满足以下条件:
- 对于任意满足 1 ≤ i < j ≤ k 1 \\leq i < j \\leq k 1≤i<j≤k 的点对 ( i , j ) (i,j) (i,j) , ∣ a i − a j ∣ ≥ M A X |a_i-a_j| \\geq MAX ∣ai−aj∣≥MAX ,其中 M A X MAX MAX 为序列种的最大值。
给定长度为 n ( 1 ≤ n ≤ 1 0 5 ) n(1 \\leq n \\leq 10^5) n(1≤n≤105) 的序列 a a a ,求其最大的奇怪子序列。
题解
奇怪序列中,必定最多只有一个正数。否则两个正数之差,必定小于
M
A
X
MAX
MAX 。
因此最大奇怪子序列最少可以选择所有非正数。然后再判断在选择一个最小正数的情况下,是否依旧满足条件,若可以则答案
+
1
+1
+1 。
参考代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100100;
int a[MAXN];
int main()
{
int T,n,i,ans,flag,mx;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
mx=0;
for(i=1;i<=n;i++)
{
if(a[i]>0)
{
mx=a[i];
break;
}
}
ans=i-1;
flag=(mx>0);
for(i=2;i<=ans;i++)
{
if(a[i]-a[i-1]<mx)
{
flag=0;
break;
}
}
printf("%d\\n",ans+flag);
}
}
div.2-C/div.1-A. Parsa’s Humongous Tree
题目大意
给定一棵包含
n
(
2
≤
n
≤
1
0
5
)
n(2 \\leq n \\leq 10^5)
n(2≤n≤105) 个节点的树,每个节点
v
v
v 有两个给定整数
l
v
,
r
v
(
1
≤
l
v
≤
r
v
≤
1
0
9
)
l_v,r_v(1 \\leq l_v \\leq r_v \\leq 10^9)
lv,rv(1≤lv≤rv≤109) 。
你需要为每个节点
v
v
v 赋一个权值
a
v
a_v
av ,使得对于所有边
(
u
,
v
)
(u,v)
(u,v) ,
∣
a
u
−
a
v
∣
|a_u-a_v|
∣au−av∣ 的总和最大。
题解
设有
x
x
x 节点被赋予的权值为
a
i
a_i
ai ,与
x
x
x 相邻的节点中,有
p
p
p 个节点的权值比
a
i
a_i
ai 大,有
q
q
q 个节点的权值比
a
i
a_i
ai 小。
那么:
- 若 p > q p > q p>q ,则可以减小 a i a_i ai 得到更优解,且减小时 p > q p > q p>q 不变,即 a x = l x a_x=l_x ax=lx 为最优解;
- 若 p < q p < q p<q ,则可以增大 a i a_i ai 得到更优解,且增大时 p < q p < q p<q 不变,即 a x = r x a_x=r_x ax=rx 为最优解;
- 若 p = q p = q p=q ,则 a x a_x ax 为任何值均可;
因此,对于每个节点 v v v ,赋值为 l v l_v lv 或 r v r_v rv 时最优。
设
d
p
x
,
0
dp_{x,0}
dpx,0 表示
x
x
x 节点赋值为
l
v
l_v
lv 时,以
x
x
x 节点为根的子树的最大边权值和;
设
d
p
x
,
1
dp_{x,1}
dpx,1 表示
x
x
x 节点赋值为
r
v
r_v
rv 时,以
x
x
x 节点为根的子树的最大边权值和。
设
s
o
n
son
son 为
x
x
x 的儿子,易得:
d
p
x
,
0
=
∑
s
o
n
m
a
x
(
d
p
s
o
n
,
0
+
∣
l
x
−
l
s
o
n
∣
,
d
p
s
o
n
,
1
+
∣
l
x
−
r
s
o
n
∣
)
dp_{x,0}=\\sum_{son}{max(dp_{son,0}+|l_x-l_{son}|,dp_{son,1}+|l_x-r_{son}|)}
dpx,0 以上是关于Codeforces Round#722 div.1+div.2题解的主要内容,如果未能解决你的问题,请参考以下文章 Codeforces Round #722 (Div. 2) 20210525 Codeforces Round #722 (Div. 2)Codeforces-1529 ABC Codeforces Round #722 (Div. 2)Codeforces-1529 ABCD Codeforces Round #722 (Div. 2)Codeforces-1529 ABCD