ARC149
没有 F 题
A A A
-
题意:
给定
n,m,找到一个数字长n位,每位数字都相同且是m的倍数 -
题解:
直接模拟
B B B
-
题意:
给定序列
A,B,每次可以同时交换 A i , A j A_i,A_j Ai,Aj 与 B i , B j B_i,B_j Bi,Bj,求lis(A)+lis(B)的最大值 -
题解:
对于每次交换最多对一个序列的
lis的长度影响是1可以通过 n − l i s ( A ) n-lis(A) n−lis(A) 次交换让
A变成 1 , 2 , 3 ⋯ n 1,2,3\cdots n 1,2,3⋯n,也就是每次交换都让A的lis加一,但不一定会让B的lis长度减少,故把A排成单调上升的一定最优
C C C
-
题意:
构造 n × n n\times n n×n 的网格图,每个格子中的数为 1 ∼ n 2 1\sim n^2 1∼n2 中的一个且每个数字均不相同,使两个相邻的数字之和不为质数
-
题解:
奇数与奇数、偶数与偶数一定满足条件,只需要考虑奇数与偶数间的情况即可
如果有奇数和偶数的格子相邻,令这两个数一定是
3的倍数,最小化这种情况出现(一半奇数一半偶数,只让中间的为奇偶数交界),最多有 n n n 个这样的交界,让这2n个格子都是3的倍数即可n < 6 n<6 n<6 的情况打表即可
D D D
-
题意:
给定
n个数和m个 d i d_i di,要求对每一个数做以下处里-
x > 0 x>0 x>0,使 x − d i x-d_i x−di
-
x = 0 x=0 x=0,不变
-
x < 0 x<0 x<0,使 x + d i x+d_i x+di
求这
n个数最后结果,若中途变成0输出变成0的时间 -
-
题解:
首先考虑到对于
x与-x,最终结果为相反数或同时变成0这样就直接维护一段的情况,从
0将整个序列分成正负两部分,每次将长度较少的一半并到较长的一半上处理即可
E E E
-
题意:
有一个环,第 i i i 次操作将 a i , a ( i + 1 ) m o d n ⋯ a ( i + m − 1 ) m o d n a_{i},a_{(i+1)\bmod n}\cdots a_{(i+m-1)\bmod n} ai,a(i+1)modn⋯a(i+m−1)modn 排序,给定进行次数和操作序列长度,已知最终序列求初始序列的情况数
-
题解:
转化一下操作,改为有一个大小为
m-1集合和一个队列,每次把队首加入集合,并且将集合最小元素加入队尾这样就把操作固定为只有
n-m+1次了,因为操作小于n-m+1次的可以将没有进入过集合的数字删掉,大于n-m+1次的操作相当于就是后面的队列一直翻转还原到只进行
n-m+1次后的状态,考虑有多少种原来的方案可以达成这样的情况设现在为 { L } ( R ) \{L\}(R) {L}(R),初始为 { X } ( Y ) \{X\}(Y) {X}(Y)
若有 R i − 1 > R i R_{i-1}>R_i Ri−1>Ri,则说明 R i R_i Ri 这个数一定在加入集合的瞬间被弹出了,故有 Y i = R i Y_i=R_i Yi=Ri,故需要把 R R R 中这些数去掉,改为单调递增的
考虑剩余的情况
若 L L L 不为 ( n − m + 1 ) ∼ n (n-m+1)\sim n (n−m+1)∼n 这样的答案一定为
0对于 R i R_i Ri,初始可能在 X X X 集合或者在 Y 1 ∼ i Y_{1\sim i} Y1∼i,处理完 R R R 后把 L L L 中所有数字全排列即可,故情况数为 m R s z × ( m − 1 ) ! m^{Rsz}\times (m-1)! mRsz×(m−1)!。
本文精选了几道算法竞赛题目并提供了详细的解题思路与代码实现,包括构造特定矩阵、序列优化处理、环形序列操作等问题。


被折叠的 条评论
为什么被折叠?



