ABC221G

题面

link

​ 给定一个长度为 \(n\) 的序列\(D\),对于每一个\(i\)可以选择向一个方向走长度为 \(D_i\),问是否能走到\((A,B)\)

题解

​ 两个trick合并的一道题。

​ trick1:将坐标系旋转\(45^\circ\)(高级的名字好像叫:曼哈顿距离与切比雪夫距离),然后\((A,B)\rightarrow(A-B,A+B)\),同样的,\((0,\pm d)\)\((\pm d,0)\rightarrow (\pm d,\pm d)\),这样,对横坐标的影响和对纵坐标的影响都是独立的了。就可以进行下一步操作。(同样的题目:ARC103D Robot Arms

​ 现在的问题变成了:

给定一个序列\(A\)和一个值\(X\),你要构造一个包含\(\{1,-1\}\)的序列B,使\(\sum_{i=1}^nA_iB_i=X\)

​ trick2:记\(sum=\sum_{i=1}^nA_i\),上面的问题转化为:选出一些\(A_i\)作为序列\(C\)(实际上就是那些会选\(-1\)的数),使\(sum-2\sum C_i=X\),即\(2\sum C_i=sum-X\)。这个在判了\(sum-X\mod 2\)之后是可以背包求的,然后通过bitset优化。

启发

  • 就是上面的两个trick。
  • 感觉第一个还可以不停留在坐标系上。比如:两个目标,多个元素,你需要对每一个元素先选它会作用于哪个目标上之类的。
posted @ 2022-02-17 17:49  qwq_123  阅读(35)  评论(0编辑  收藏  举报