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 1i<jk 的点对 ( i , j ) (i,j) (i,j) ∣ a i − a j ∣ ≥ M A X |a_i-a_j| \\geq MAX aiajMAX ,其中 M A X MAX MAX 为序列种的最大值。

给定长度为 n ( 1 ≤ n ≤ 1 0 5 ) n(1 \\leq n \\leq 10^5) n(1n105) 的序列 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(2n105) 个节点的树,每个节点 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) lvrv(1lvrv109)
你需要为每个节点 v v v 赋一个权值 a v a_v av ,使得对于所有边 ( u , v ) (u,v) (u,v) ∣ a u − a v ∣ |a_u-a_v| auav 的总和最大。

题解

设有 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

Codeforces Round #722 (Div. 2) A~D 题解

Codeforces Round #722 (Div. 2) 部分题解