首页 > 其他分享 >[省选联考 2023] 染色数组 题解

[省选联考 2023] 染色数组 题解

时间:2023-04-09 15:34:05浏览次数:41  
标签:省选 题解 染成 pos 绿色 color 红色 染色 联考

题目描述

给定一个长度为 \(n\) 的正整数数组 \(A\),其中每个数都在 \(1\) 到 \(m\) 之间,从左到右排成一排。现在要将每个数字染成红色或者绿色,我们定义一个染色方案为优秀的染色方案,当且仅当它满足:

  1. 每个数 \(A_{i}\) 要么被染成红色,要么被染成绿色。
  2. 红色的数从左到右依次严格递增,绿色的数从左到右依次严格递减。

例如:\(1\;9\;3\;4\;7\;6\) 中,将 \(1\;3\;4\;7\) 染成红色,\(9\;6\) 染成绿色是优秀的染色方案(\(\color{red}1\color{green}9\color{red}347\color{green}6\));\(1\;3\;4\;6\) 染成红色,\(9\;7\) 染成绿色也是优秀的染色方案(\(\color{red}1\color{green}9\color{red}34\color{green}7\color{red}6\))。但是将 \(1\;4\;7\;6\) 染成红色,\(9\;3\) 染成绿色则不是优秀的染色方案,因为 \(1\;4\;7\;6\) 不是递增的。\(1\;9\;5\;5\) 中,将 \(1\) 和任意一个 \(5\) 染色红色,\(9\) 和另一个 \(5\) 染成绿色,也是优秀的染色方案(其中一种是 \(\color{red}1\color{green}95\color{red}5\))。

如果一个数组至少存在两个不同的优秀的染色方案,那么称这个数组是完美的。(两个染色方案不同当且仅当至少存在一个位置上的数字被染成不同的颜色)。

例如,\(1\;9\;3\;4\;7\;6\) 和 \(1\;9\;5\;5\) 都是完美的,因为上面已经分别给出了 \(2\) 种优秀的染色方案。而 \(2\;3\;3\;3\) 则不是完美的,因为找不到任何一种优秀的染色方案。同时 \(1\;5\;3\;6\;4\) 也不是完美的,因为仅存在一种优秀的染色方案(\(\color{red}1\color{green}5\color{red}36\color{green}4\))。

补充说明:如果红色的数只有 \(0\) 个或者 \(1\) 个,我们也认为它严格递增;同理如果绿色的数只有 \(0\) 个或者 \(1\) 个,我们也认为它严格递减。例如 \(\color{red}123\),\(\color{red}1\color{green}2\color{red}3\) 都是优秀的的染色方案,因此 123 是完美的数组。

我们定义一种给染色方案打分的方式。

对于每个的有序元素对 \(A_{i}, A_{j}(i<j)\) :

  1. 如果 \(A_{j}\) 染成红色,且 \(A_{j}<A_{i}\),则该元素对得 \(m-A_{j}+1\) 分;
  2. 如果 \(A_{j}\) 染成绿色,且 \(A_{j}>A_{i}\),则该元素对得 \(A_{j}\) 分;
  3. 不满足 1 或 2 ,则该元素对得 \(0\) 分。

则一个染色方案的得分为所有有序元素对的得分和。

一个完美的数组的得分为它所有优秀的染色方案的得分的最大值。

现在确定数组 \(A\) 的前 \(t\) 个数 \(A_{1}, A_{2}, \ldots,A_{t}\), 你需要回答以下两个问题:

  • 第一问:有多少种确定 \(A\) 中后 \(n-t\) 个数的方案使得 \(A\) 是一个完美数组?
  • 第二问:所有可能的完美数组的得分和是多少?

由于答案太大,你只需要输出答案在模 \(998244353\) 下的结果即可。

提示

【评分方式】

每个测试点 \(5\) 分。

每一行应按顺序输出两问的答案,不符合输出格式的输出得 \(0\) 分。

程序仅回答对第一问得 \(1\) 分,仅回答对第二问得 \(4\) 分,两问都答对得 \(5\) 分。

如果你不回答第一问或第二问,也需要在对应位置上输出任意一个整数以满足输出格式。

【子任务】

对于所有的数据,保证: \(1 \leq C \leq 5\);\(2 \leq n \leq 50\);\(1 \leq t \leq n\);\(1 \leq m \leq 200\);\(1 \leq A_{i} \leq m\) 。

题解

下面是我想的做法。

先思考\(t=n\)怎么做,即给定一个完整的数组\(A\),判定其是否为完美数组,以及计算其得分。

先考虑判定怎么做。

首先,一个完美数组中出现次数最多的元素,出现次数必然\(<=2\),若同一元素出现三次,因为红,绿均要求严格,考虑最好的情况,也只是一个染成红色,一个染成绿色,剩下一个甚至无法染色,下面对完美数组的讨论均有这一前提。

若其为完美数组,则必然存在一个非空的位置集合\(S\),其中的位置上的数既可以被染成红色,也可以被染成绿色,因为如果集合\(S\)为空集,那么相当于每个位置的颜色是唯一的,当然也有可能找不出优秀的染色方案,不过无论是哪种情况,该数组都不可能为完美数组。

考虑一个位置\(pos\)怎么样才可能在集合\(S\)中,我们发现这件事情等价于\([1,pos-1]\)中\(<=A_{pos}\)的数与\([pos+1,n]\)中\(>=A_{pos}\)的数构成递增子序列且\([1,pos-1]\)中\(>=A_{pos}\)的数与\([pos+1,n]\)中\(<=A_{pos}\)的构成递减子序列,若\(pos\)满足以上两个条件,那么\(A_{pos}\)染成红色或绿色均可。

方案:若\(pos\)染成红色,则将\([1,pos-1]\)中\(<A_{pos}\)的数均染成红色,\([pos+1,n]\)中\(>A_{pos}\)的数均染成红色,剩余的数染成绿色即可。

若\(pos\)染成绿色,则将\([1,pos-1]\)中\(>A_{pos}\)的数均染成绿色,\([pos+1,n]\)中\(<A_{pos}\)的数均染成绿色,剩余的数染成红色即可。

那么判断集合\(S\)是否为空集只需枚举\(pos\),同时维护前缀后缀即可做到线性。

那么\(t=n\)的第一问做完了,2分到手。

接下来思考整个题怎么做。

考虑\(S\)中的数有什么性质:首先,不可能有断点,在位置上必然是连续的。

即记\(S\)中最小值为\(l\),最大值为\(r\),那么\(S\)中的元素即为\(l\)至\(r\)。

证明:第一种情况,\(S\)中只有一个元素。

去除\(S\)中只有一个元素的情况,考虑\(S\)中只有两个元素的情况,不妨使用反证法。

设\(S\)中只有\(pos_1,pos_2\)两个元素,\(pos_1<pos_2\)且\(pos_2!=pos_1+1\),首先讨论\(A_{pos_1}=A_{pos_2}\)的情况,发现无法找到染色方案,推出矛盾,那么即可推出\(S\)中元素的第二种情况\(r=l+1\)且\(a_r=a_l\)

根据我们之前的推论可知\([1,pos_1-1]\)中\(<=A_{pos_1}\)的数与\([pos_1+1,n]\)中\(>=A_{pos_1}\)的数构成递增子序列,\([1,pos_2-1]\)中\(<=A_{pos_2}\)的数与\([pos_2+1,n]\)中\(>=A_{pos_2}\)的数构成递增子序列,\([1,pos_1-1]\)中\(>=A_{pos_1}\)的数与\([pos_1+1,n]\)中\(<=A_{pos_1}\)的数构成递减子序列,\([1,pos_2-1]\)中\(>=A_{pos_2}\)的数与\([pos_2+1,n]\)中\(<=A_{pos_2}\)的数构成递减子序列。

不妨设\(A_{pos_1}<A_{pos_2}\),那么\([pos_1+1,pos_2-1]\)中\(<=A_{pos_2}\)的数构成递增子序列,\([pos_1+1,pos_2-1]\)中\(>=A_{pos_2}\)的数构成递减子序列,那么任取\(x\in[pos_1+1,pos_2-1],x\in Z\)。

首先必然有\(A_x>A_{pos_1}\)(由\([1,pos_2-1]\)中\(<=A_{pos_2}\)的数构成递增子序列,且\(A_{pos_1}<A_{pos_2}\)推出。)。

其次必然有\(A_x<A_{pos_2}\),证明考虑若\(A_x>A_{pos_2}\),由于已有\(A_x>A_{pos_1},A_{pos_2}>A_{pos_1}\),故与\([pos_1+1,pos_2-1]\)中\(>=A_{pos_1}\)的数构成递增子序列矛盾!

所以\(A_{pos_1}<A_x<A_{pos_2}\)。

则由上可推出\([1,x-1]\)中\(<=A_x\)的数与\([x+1,n]\)中\(>=A_x\)的数构成递增子序列,且\([1,x-1]\)中\(>=A_x\)的数与\([x+1,n]\)中\(<=A_x\)的数构成递减子序列,则\(x\)也在集合\(S\)中,与\(S\)中只有两元素的假设矛盾!

\(A_{pos_1}>A_{pos_2}\)的情况是类似的,可推出\(A_{pos_1}>A_x>A_{pos_2}\)。

而且由于任取\(x\in[pos_1+1,pos_2-1],x\in Z\)都可证明\(x\)在\(S\)中,故对于任意的\(i\in[l,r],i\in Z\),\(i\)均在集合\(S\)中,且满足\(A_l<...<A_r\)或\(A_l>...>A_r\),这是第三种情况。

接下来考虑在这些数在值域上有什么性质。

可以发现\(l\)到\(r\)这些数在值域上切出了一段,即对于任意的\(i\in[1,l-1],i\in Z\),均有\(A_i \notin[min(A_l,A_r),max(A_l,A_r)]\)。

证明考虑反证法,若存在\(i\in[1,l-1],i\in Z\),有\(A_i\in[min(A_l,A_r),max(A_l,A_r)]\),若\(i\)被染成红色,则\(A_l\)至\(A_r\)中小于\(A_i\)的数不能被染成红色,绿色同理,那么这些数的位置就不能在集合\(S\)中,推出矛盾!即证。

仅在\(n=1\)时会出现第一种情况。

第二种情况与第三种情况类似做。

取第三种情况讨论。

先做第一问,我们可以在\(r\)处统计方案数,注意到对于\(A_1\)至\(A_{r-1}\)这些数,恰好存在一种染色方案使得红色序列结尾小于\(A_r\),绿色序列结尾大于\(A_r\),即将\(l\)至\(r-1\)的所有数染成红色,\([1,l-1]\)中的数\(<A_l\)的染成红色,\(>A_r\)的染成绿色。

那么可以\(dp\),具体的,我们令\(f[i][j][k]\)表示现在做完了第\(i\)个数,红色序列结尾的数为\(j\),绿色序列结尾的数为\(k\)的方案数,枚举\(r,A_r,A_{r+1}\),转移形如\(f[i][lim_j][lim_k]=\sum\limits_{j<lim_j}f[i-1][j][lim_k]+\sum\limits_{k>lim_k}f[i-1][lim_j][k]\),前缀和优化一下发现是\(O(nm^2)\)的,最后答案\(ans\)形如\(\sum\limits_{j}\sum\limits_{k} f[n][j][k]\),在最开始预处理一下\(f\)即可。

第一问做完了,时间复杂度单次\(O(nm^2)\),20分到手。

考虑第二问怎么做,先思考\(t=n\)怎么办。

此时\(S\)已知,取\(A_l<...<A_r\)讨论,另一种情况类似。

此时\(S\)中的数至多有一个被染成绿色。

考虑有一个数被染成绿色的情况。

不妨假设将\(A_{pos}(l<=pos<=r)\)染成绿色,固定\(pos\),对得分的贡献为\(\sum\limits_{i=1}^{l-1}[A_i<A_{pos}]*A_{pos}+\sum\limits_{i=l}^{pos-1}A_{pos}\),即\(\sum\limits_{i=1}^{l-1}[A_i<A_{pos}]*A_{pos}+(pos-l)*A_{pos}\),当\(pos\)变大时,\(A_{pos}\)变大,\([1,l-1]\)中小于\(A_{pos}\)的个数可能变多,\((pos-l)\)变大,对得分的贡献显然变大,所以若要选一个染成绿色,我们必须贪心的将\(A_r\)染成绿色来最大化得分。

当然,也有可能\(S\)中的数均被染成红色,也需要讨论。

其实与上面的染色方案唯一的区别就是将\(A_r\)改为了红色。

那么综上所述

\[若A_r染成红色\\ 则将[1,r-1]中<A_r的元素染成红色,[1,r-1]中>=A_r的元素染成绿色\\ 将[r+1,n]中>A_r的元素染成红色,[r+1,n]中<=A_r的元素染成绿色\\ 设该方案得分为res_1\\ 若A_r染成绿色\\ 则将[1,r-1]中<=A_r的元素染成红色,[1,r-1]中>A_r的元素染成绿色\\ 将[r+1,n]中>=A_r的元素染成红色,[r+1,n]中<A_r的元素染成绿色\\ 设该方案得分为res_2\\ 那么最终的最大得分res=max(res_1,res_2) \]

那么\(t=n\)的第二问也做完了,28分到手。

接下来思考整个题怎么做。

仍然枚举\(r,A_r,A_{r+1}\)

我会拆贡献!

\[[1,r-1]:\\ 设g[i][j][k]表示前i个数,红色结尾j,绿色结尾k,得分和\\ g0[i][j][k]表示前i个数,红色结尾j,绿色结尾k,红色数之和\\ g1[i][j][k]表示前i个数,红色结尾j,绿色结尾k,绿色数之和\\ r:\\ 设[1,r-1]中剩余num个位置可以填数\\ 有num_R个<A_r的可以填的数,有num_G个>A_r的可以填的数,对答案的贡献为\\ \sum\limits_{i=0}^{num}\binom{num}{i}\binom{num_R}{i}\binom{num_G}{num-i}max(A_r红情况,A_r绿情况)\\ A_r红:(m-A_r+1)*(num-i)+...\\ A_r绿:A_r*i+...\\ 就是上面写的两个方案里取个max,如果看懂了我写的,自己应该能推出来,因此就不写了\\ [r+1,n]:\\ 不妨以A_i染成绿色为例,染成红色是类似的\\ 我们需要统计A_1至A_{i-1}中有多少个数小于A_i\\ 对r分类讨论:\\ 若r<t,此时A_r已经确定,A_{r+1}已经确定\\ 外层循环只有i,r,是O(nm)的\\ 对于已经确定的数,出现次数就是第一问的方案数\\ 未确定的数,出现次数是相同的,出现次数之和可以计算,计算出和后取平均值即可\\ 得到所有数出现次数后乘乘贡献就得到了答案。\\ 若r=t,此时A_r已经确定,A_{r+1}未确定\\ 若r>t,则A_r未确定,A_{r+1}未确定,这两种情况可以放在一起做。\\ 以A_{r+1}为分界点断开,左边的数分为一类,A_{r+1}一类,右边的数分为一类,出现次数不同的数只有这三类\\ 将r往右挪动时重新计算即可,挪动次数是O(n)的。 \]

综上所述,本题单次复杂度是\(O(n^2m^2)\)的,但是多组询问,所以还要乘个\(C\),所以最后复杂度是\(O(Cn^2m^2)\)的,可以通过,只要我说的是对的,100分到手。

标签:省选,题解,染成,pos,绿色,color,红色,染色,联考
From: https://www.cnblogs.com/llzer/p/17300377.html

相关文章

  • P2824 [HEOI2016/TJOI2016]排序 题解
    题目传送门前言线段树好题!!!!咕咕了挺久的一道题目,很早之前就想写了,今天终于找了个时间A掉了。题意给定一个\(1\)到\(n\)的排列,有\(m\)次操作,分两种类型。1.0lr表示将下标在\([l,r]\)区间中的数升序排序。2.1lr表示将下标在\([l,r]\)区间中的数降序排序。给......
  • Windows10锁屏1分钟息屏问题解决 - 桌面、锁屏、屏保一站搞定
    Windows10桌面、锁屏、屏保一站解决一、背景在Windows10以前的Windows中,桌面和锁屏界面的超时息屏时间是一致的,都是简单在控制面板的电源设置中,调整关闭显示器时间即可。但到了Windows10这个世代,电源中的关闭显示器时间,只对桌面有效,也就是对没有锁屏的Windows桌面有效;一旦用户......
  • 2023年4月蓝桥杯B组A到G题解析
    试题A:阶乘求和本题总分:5分【问题描述】令S=1!+2!+3!+...+202320232023!,求S的末尾9位数字。提示:答案首位不为0。【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得......
  • Vs-Code—控制台+乱码问题解决
    在创建第一个项目之前,需要按照环境和插件,这里对此不做阐述,读者自行查找资料。解决问题:更改输出位置+c/cpp中文乱码1、集成控制台输出->外部控制台输出1.1、c/cpp文件1、新建文件2、编写一段代码2、在运行和调试按钮下,点击创建launch.json文件在launch.json文件中,改"externalConsole......
  • Mondriaan's Dream 【POJ2411】 题解
    Mondriaan'sDream【POJ2411】题解——ByZy注:原题中的\(h,w\)在本文中使用\(n,m\)代替。一.题意分析:题目要求给定一个一定大小的矩形棋盘,求出使用\(1\times2\)大小的木条填充一共有多少种方案。读题,发现数据范围\((1\leh,w\le11)\),考虑使用状压DP算法,于是......
  • ECE 5101/CSE 5463 问题解答
    ECE5101/CSE5463,Spring2023Due:Apr.811:59pm,2023onCarmenHomeworkAssignment#4LateSubmissionNOTAcceptedHomeworkAssignment#41.(20points)InanunslottedALOHAsystem,thepacketarrivaltimesofallusersformaPoissonprocesshavingarate......
  • ARC130D ZigZag Tree 题解
    题目链接考虑这棵树在满足条件下是什么样子的?我们发现如果对于一棵树黑白染色,白色表示周围的点大于自身,黑色的点反之,是满足条件的。同时,将黑白点反色也是满足条件的。我们考虑进行\(\text{dp}\),设\(dp_{i,j,0/1}\)表示以点\(i\)为根的子树,\(i\)点权值的排名是\(j\),且......
  • 鲜花:省选前后产生的一点想法
    想讲点废话。大概有两个想说的话题,所以拿不准标题起什么。其中一个和省选前有关。今年省选,我特意留意了一下我的心态。或者说,特意去感受了一下我的心态到底是个什么情况。在以前我是认为心态就分成两类,就是紧张与不紧张。紧张的话这场考试大概率是考不好的,不紧张的话这场考试考......
  • 【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小
    比赛传送门:https://ac.nowcoder.com/acm/contest/53366难度适中。......
  • Edu Round 板刷计划 4. Educational Codeforces Round 4 题解
    ChangeLog:2023.04.06开坑.A-TheTextSplitting弱智题.枚举分出来多少个长度为\(p\)的串,则能计算出长度为\(q\)的串有多少个,若合法则直接输出即可.无解输出-1.Samplesubmission.B-HDDisOutdatedTechnology比A还弱智.直接记录每个数的位置,然后模拟一......