CF竞赛题目讲解_CF1783D(散列式DP + 滚动数组)
2023-01-16 10:06 作者:Clayton_Zhou | 我要投稿
AC代码
https://codeforces.com/contest/1783/submission/189273868
题意:
给您一个由n个整数组成的数组a。
您必须在此数组上依次执行n−2个操作:
1.在第一次操作中,将a2加到a1上,然后从a3减去a2,
或者将a2加到a3上并从a1中减去a2;
2.在第二次操作中,将a3加到a2上,然后从a4减去a3
或者将a3与a4相加并从a2减去a3;
...
在最后一次操作中,您可以将a_{n−1}添加到a_{n−2}
并从a_{n}中减去a_{n−1},或将a_{n−1}添加到a_{n}中并从从a_{n−2}减去a_{n−1}.
因此,在第i次操作中,将a_{i+1}的值添加到它的一个邻居,然后从另一个邻居中减去它。
例如,如果您有数组[1,2,3,4,5],可能的操作序列之一是:
从a3中减去2并将其加到a1上,因此数组变为 [3,2,1,4,5];
从a2中减去1并将其添加到a4中,因此数组变为[3,1,1,5,5];
从a3减去5并将其加到a5,这样数组就变成[3,1,−4,5,10].
因此,得到的数组是[3,1,−4,5,10]。
如果可以通过对a执行上述操作序列获得数组,则该数组是可达。
您必须计算可达数组的数量,并取模998244353的余数
题解:
散列式DP + 滚动数组