题意
有个m维的空间,并且每一维的坐标x都满足x∈ [0, 3]并且x为整数。
这个空间有n个部落,每个部落都坐落在这片空间中的一个点上,可以用坐标(x1, x2, …, xm)来表示。
有些部落可能在在同一个点上面。
定义两个点的距离为它们的曼哈顿距离,即每一维坐标差的绝对值的和。
比如对于点(x1, x2, …, xm)和(y1, y2, …, ym),它们之间的距离为
现在对0~3m之间的每一个数字x,统计有多少对部落之间的距离为x。
注意,一对部落是有序的,即部落(a, b)和部落(b, a)为不同的两对。
n<=200000,m<=9
分析
可以设f[i,j,k]表示四进制下前i位和k的距离为j,且后m-i位和k相同的数有多少个。
xjb转移即可。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
int n,m,bin[15],f[10][30][272144];
struct data{
int a[10];}bel[272144],a[200005];
LL ans[30