Codeforces Round #785 (Div. 2)

A、B

随便写

C

定义回文数为把数位倒置后值不变的数字,例如1,2,3,11,111,121

给定一个数字a(1n4104),将其转换为多个回文数相加,求方案数

 

一句话题解:无限背包

 

有一个朴素的想法f[i][j]表示将数字i表示为j个回文数相加的方案数,那么有:

f[i][j] = sum(f[i-k][j-1]) k∈回文数

但是会超时。。。但是这勾引起一个叫做“背包DP计算方案数”的思路。。。

仔细一想,把回文数当成物品,这个其实就是一个无限背包问题。。。

D

有两个有限的等差数列A、B(指起点和长度的等差数列),将同时存在这两个数列中的数字拿出来构成数列C,显然C也是一个有限的等差数列

给出B、C,求可能的数列A有多少个

每个数列由x, y, z表示,x表示数列起点、y表示公差、z表示长度 (1≤x,y,z109)

 

其实不难,就是比较麻烦

1. A、B数列的公差的最小公倍数是C数列的公差

2.找到可能的公差之后就可以得出在C数列起点前A数列可能有多少个数字

  这个比较好想,就是C数列起点Cx/Ay

3.最后考虑简单考虑一下不可能的情况和无限的情况就好了

F

交互题

一个n维的方格图,需要指定每条边的长度,对于一条从点A移动到点B的路径,给出这条路径上所有边长的xor和

从左上角开始进行k次移动,每次移动后给出经过路径上所有边长的xor和,需要给出每次移动后的坐标点

边长的总和不能超过48000,n小于等于32

 

思路很简单,给每个点设置一个唯一序号,点之间的路径为序号的xor

但是问题在于这样边长总和会超时

不想想了

看了一下题解,这个是二维的格雷码

主要的思路就是确保每两个点之间只有一位有变化,这样可以确保边长最小

感觉以这种思路做应该也是有构造方法的

posted @ 2022-05-08 23:36  HTWX  阅读(29)  评论(0编辑  收藏  举报