NOIP 模拟赛:2024-11-22

T1:

当需要对数组重标号时,想清楚哪里要用原编号,哪里要用新编号。

T2:

\(n\)个人参加THUSC,其中每个人都参加了算法场和工程场两场比赛,第\(i\)个人的得分分别是\(a_i,b_i\)

你希望给所有人进行排名,规则如下:

  • 先选定两个正实数\(x,y\),计算每一个人的综合得分为\(xa_i+yb_i\)
  • 按照综合得分从高到低排序,对于同分选手,你可以在他们之间任意排序

则共可能得到多少种不同的排名顺序?两种排名顺序不同,当且仅当存在一个人排名不同。 答案对 998244353 取模。
\(n\le 1000\)

容易想到固定 \(y=1\),得到 \(n\) 条直线 \(a_ix+b_i\)。求出这些直线的交点们,去重按 \(x\) 排序。

枚举 \(x\),统计在 \(x\) 处所有交点生效时,所有可能的排名顺序减去与之前交点重复的排名顺序个数。

所有可能的排名顺序很简单。把在 \(x\) 处相交的线用并查集合并,每个连通块的大小阶乘之积就是了。

那重复的排名个数呢?(赛时卡在这里了)

只有一种重复!为什么?首先,对于之前的 \(x\),当前这些能互相交换线的顺序都是固定的,也就是只有一种排列方式。

T3:

给定长度为 \(n\) 的序列 \(A\) ,将 \(A\) 中元素重排得到了一个新的序列 \(B\) ,规则如下:

  • \(B\) 初始为空,同时维护一个初始为空的小根堆 \(T\) ,然后进行以下两类操作各 \(n\) 次:
    1. 将当前 \(A\) 的第一个元素删除并加入小根堆 \(T\) 中;
    2. 将小根堆 \(T\) 的堆顶删除并加入 \(B\) 的末尾,需要保证 \(T\) 非空。

你可以任意合法的顺序排列两类操作,例如\(n=4\)时使两类的操作顺序为\((1,1,2,1,2,2,1,2)\)。则共可能得到多少种不同的 \(B\) ? 答案对 998244353 取模。

\(1\le n\le 100\)

首先容易想到把 \(A\) 弄成一个互不相同的数组,令相同的数越靠后越大即可。

考虑区间 DP。暂定 \(dp[l][r]\)\(l\sim r\) 排出来的方案数。

观察性质:当序列的最大值出堆的时候,堆一定为空。在堆清空之后的进出堆操作,就都与前面的数无关了。这可以作为划分状态的依据。

因此转移考虑枚举 \(a_l\sim a_r\) 的最大值 \(mx\) 在哪里。注意如果 \(mx\) 初始在 \(pos\) 位置,显然它最终只会在 \(pos\sim r\) 中。

但是这样无法形成递推,因为枚举了位置之后还是会把最大值考虑进去。所以升维,\(dp[l][r][x]\) 表示 \(l\sim r\) 中只考虑 \(\le x\) 的数的方案数。

T4:

洛谷原题。History Course

posted @ 2024-11-28 14:26  FLY_lai  阅读(33)  评论(0)    收藏  举报