[51nod1920]空间统计学
来源:互联网 发布:软件研究所 导师 编辑:程序博客网 时间:2024/06/14 08:33
Description
给出m维平面上的n个点,每个点的每维坐标在[0,3]范围内
对于i=0~3m,求曼哈顿距离为i的点对数量
n<=200000,m<=9
Solution
被鞋垫教做题QwQ我真是太菜了
才不是什么FWT呢
考虑状压Dp,压4进制m位
Fi,j,s表示考虑完前i为,走了j步,到状态为j的点数
然后直接求答案即可
复杂度O(4^(m+1)*3m^2)
Code
#include <cstdio>#include <cstring>#include <algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;typedef long long ll;int read() { char ch; for(ch=getchar();ch<'0'||ch>'9';ch=getchar()); int x=ch-'0'; for(ch=getchar();ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; return x;}const int M=(1<<18)+5,N=10;int n,m,a[N],b[M][N],four[N];ll f[2][M][N*3],Ans[N*3];int Abs(int x) {return x>0?x:-x;}int in(int *a) { int res=0; fo(i,1,m) res=res*4+a[i]; return res;}int main() { n=read();m=read(); fo(i,1,n) { fo(j,1,m) a[j]=read(),b[i][j]=a[j]; f[0][in(a)][0]++; } fo(i,1,m) a[i]=3;int all=in(a); four[0]=1;fo(i,1,m) four[i]=four[i-1]<<2; int p=0,q=1; fo(i,1,m) { fo(s,0,all) fo(j,0,3*(i-1)) { int now=s/four[m-i]%4; fo(x,0,3) f[q][s-(now-x)*four[m-i]][j+Abs(x-now)]+=f[p][s][j]; } swap(p,q);memset(f[q],0,sizeof(f[q])); } fo(i,1,n) { fo(j,1,m) a[j]=b[i][j]; int now=in(a); fo(j,0,3*m) Ans[j]+=f[p][now][j]; } fo(i,0,3*m) printf("%lld ",Ans[i]);}
阅读全文
0 0
- [51nod1920]空间统计学
- 51nod 1920 空间统计学
- [51Nod 1920] 空间统计学
- 51nod 1920 空间统计学 动态规划
- 空间统计学算法2
- 空间统计学算法3
- 空间统计学算法4
- 空间统计学算法5
- [Meet in Middle] 51nod算法马拉松29 F. 空间统计学
- 统计学
- 统计学
- 统计学
- 统计学
- PostgreSQL数据库监控中的统计学 - 对象空间的数据分布图
- #统计学#统计学经典书目
- 统计学简史
- 统计学悖论
- 统计学基本知识
- linux中的定时及延时任务
- 老查的ARM学习笔记:chapter-2(linux总线设备驱动详解)
- 第四讲 类加载器的委托
- LeetCode 23. Merge k Sorted Lists
- How to: Shellcode to reverse bind a shell with netcat
- [51nod1920]空间统计学
- 第八章作业
- Python正则表达式(二)代码
- 记阿里UC跟cvte社招面试-----都挂了~
- 《刻意练习》读书笔记
- opencv学习——保存至github
- Ubuntu下搭建python开发环境
- spark中可以影响到结果partition个数的操作
- 网页爬虫小程序