最远曼哈顿距离小结 poj 2926 Requirements&hdu 4666 Hyperspace
来源:互联网 发布:js给div添加属性 编辑:程序博客网 时间:2024/05/12 01:09
转自:http://blog.csdn.net/ehi11/article/details/9961671
首先对于两点(x1,y1),(x2,y2)二维的曼哈顿距离为|x1-x2|+|y1-y2|将绝对值去掉,再将同一点的坐标归于一处可得四种情况:1.x1-x2+y1-y2->(x1+y1)-(x2+y2)2.x2-x1+y1-y2->(-x1+y1)-(-x2+y2)3.x1-x2+y2-y1->(x1-y1)-(x2-y2)4.x2-x1+y2-y1->(-x1-y1)-(-x2-y2)在右边式子中可以发现左半部分和右半部分的符号完全相同.我们假设0代表’+’,1代表’-‘,则有00 01 10 11.这里和容斥原理中求区间和给点数互质个数时的二进制枚举没有任何差别.我们可以处理处一个点所有的axi+byi的情况,若维数为k,易知有2^k种.而最大距离必定在一个点和另一个点的2^k种情况下差值的最大值中形成.静态:v[i][j]: 第i个数的第j中状态Double get(int n,int K){for(int i=0;i<n;i++) { for(int j=0;j<(1<<K);j++) { double sum=0; for(int p=0;p<5;p++) { if(j&(1<<p)) sum+=a[p]; else sum-=a[p]; } v[j][i]=sum; } } double ans=-1; for(int i=0;i<(1<<K);i++) { double a=-inf,b=inf; for(int j=0;j<n;j++) { if(v[i][j]>a) a=v[i][j]; if(v[i][j]<b) b=v[i][j]; } if(a-b>ans) ans=a-b; }} 动态:struct st{ int a[6],b[35];}s[maxn];结构体保存每个点的维数距离(a),处理出来的状态(b)multiset<int> data[35];data动态维护,对每一组状态保存一个域,里面存所有点work每次处理处所有的状态,add为增加一个点,del为删除一个点void work(int id){ for(int i=0;i<(1<<k);i++) { int sum=0; for(int j=0;j<k;j++) { if(i&(1<<j)) { sum+=s[id].a[j]; } else { sum-=s[id].a[j]; } } s[id].b[i]=sum; }}void add(int id){ work(id); for(int i=0;i<(1<<k);i++) { data[i].insert(s[id].b[i]); }}void del(int id){ for(int i=0;i<(1<<k);i++) { data[i].erase(data[i].find(s[id].b[i])); }} int get(){ for(int i=0; i<(1<<k); i++) { int a=*(data[i].rbegin()); int b=*(data[i].begin()); if(a-b>ans) ans=a-b; }}poj2926#include <stdio.h>#include <cstring>#define inf 999999999999999using namespace std;double v[35][100010];double a[6];int n;//const double inf=1000000000;int main(){ double sum; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { for(int j=0;j<5;j++) scanf("%lf",&a[j]); for(int j=0;j<32;j++) { sum=0.0; for(int k=0;k<5;k++) { if(j&(1<<k)) sum+=a[k]; else sum-=a[k]; } v[j][i]=sum; } } double ans=-1; for(int i=0;i<32;i++) { double a=-inf,b=inf; for(int j=0;j<n;j++) { if(v[i][j]>a) a=v[i][j]; if(v[i][j]<b) b=v[i][j]; } if(a-b>ans) ans=a-b; } printf("%.2lf\n",ans); } return 0;}hdu 4666#include <stdio.h>#include <cstring>#include <set>#include <algorithm>using namespace std;const int maxn=60010;struct st{ int a[6],b[35];}s[maxn];multiset<int> data[35];int n,k;const int inf=1000000000;void work(int id){ for(int i=0;i<(1<<k);i++) { int sum=0; for(int j=0;j<k;j++) { if(i&(1<<j)) { sum+=s[id].a[j]; } else { sum-=s[id].a[j]; } } s[id].b[i]=sum; }}void add(int id){ work(id); for(int i=0;i<(1<<k);i++) { data[i].insert(s[id].b[i]); }}void del(int id){ for(int i=0;i<(1<<k);i++) { data[i].erase(data[i].find(s[id].b[i])); }}int main(){ // freopen("in.txt","r",stdin); int op,a,b; while(scanf("%d%d",&n,&k)==2) { for(int i=0;i<(1<<k);i++) data[i].clear(); for(int i=1;i<=n;i++) { scanf("%d",&op); if(op==0) { for(int j=0;j<k;j++) scanf("%d",&s[i].a[j]); add(i); } else if(op==1) { scanf("%d",&a); del(a); } int ans=-inf; // printf("sz=%d\n",data[0].size()); if(data[0].size()<2) { printf("0\n"); continue; } for(int i=0;i<(1<<k);i++) { int a=*(data[i].rbegin()); int b=*(data[i].begin()); if(a-b>ans) ans=a-b; } printf("%d\n",ans); } } return 0;}
- 最远曼哈顿距离小结 poj 2926 Requirements&hdu 4666 Hyperspace
- 最远曼哈顿距离小结 poj 2926 Requirements&hdu 4666 Hyperspace
- [HDU 4666]Hyperspace[最远曼哈顿距离][STL]
- [HDU 4666]Hyperspace[最远曼哈顿距离][STL]
- POJ 2926 Requirements【最远曼哈顿距离】
- [poj 2926]Requirements[最远曼哈顿距离]
- HDU 4666 Hyperspace【最远曼哈顿距离+优先队列】
- hdoj 4666 Hyperspace 【最远曼哈顿距离】
- poj 2926 Requirements N维最远曼哈顿距离
- POJ 2926 Requirements(多维最远曼哈顿距离)
- POJ 2926 Requirements (多维最远曼哈顿距离)
- poj 2926 Requirements 【5维点集最远曼哈顿距离】
- POJ 2926 Requirements (空间最远曼哈顿距离)
- ]Requirements[最远曼哈顿距离]
- Hdu-4666 Hyperspace(曼哈顿距离)
- hdu4666--Hyperspace--最远曼哈顿距离
- 2013 多校第七场 hdu 4666 Hyperspace(最远曼哈顿距离)
- poj 2926 Requirements (曼哈顿距离)
- dp和px的转换
- linux常见知识
- 浅述WinForm多线程编程与Control.Invoke的应用
- 当执行SQL(ORACLE)时判段另一个字段的值去执行不同SQL,及 CASE WHEN 语句的使用
- ExpandableListView设置选中child的背景
- 最远曼哈顿距离小结 poj 2926 Requirements&hdu 4666 Hyperspace
- 微机原理课程设计-接口芯片编程记录
- PHP合并数组+与array_merge的区别分析
- MySQL数据库优化方案2
- 程序员遇到bug时常见的30种反应
- oschinaandroid客户端学习一
- 最远曼哈顿距离
- 设置断点技巧
- 数学函数库(三)