HDOJ 4666 Hyperspace 最大曼哈顿距离

二进制转化,求最大曼哈顿距离....

Hyperspace

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)

Total Submission(s): 1123    Accepted Submission(s): 530

Problem Description

The great Mr.Smith has invented a hyperspace particle generator. The device is very powerful. The device can generate a hyperspace. In the hyperspace, particle may appear and disappear randomly. At the same time a great amount of energy was generated.

However, the device is in test phase, often in a unstable state. Mr.Smith worried that it may cause an explosion while testing it. The energy of the device is related to the maximum manhattan distance among particle.

Particles may appear and disappear any time. Mr.Smith wants to know the maxmium manhattan distance among particles when particle appears or disappears.

Input

The input contains several test cases, terminated by EOF.

In each case: In the first line, there are two integer q(number of particle appear and disappear event, ≤60000) and k(dimensions of the hyperspace that the hyperspace the device generated, ≤5). Then follows q lines. In each line, the first integer ‘od’ represents
the event: od = 0 means this is an appear

event. Then follows k integer(with absolute value less then 4 × 107). od = 1 means this is an disappear event. Follows a integer p represents the disappeared particle appeared in the pth event.

Output

Each test case should contains q lines. Each line contains a integer represents the maximum manhattan distance among paticles.

Sample Input

10 2
0 208 403
0 371 -180
1 2
0 1069 -192
0 418 -525
1 5
1 1
0 2754 635
0 -2491 961
0 2954 -2516

Sample Output

0
746
0
1456
1456
1456
0
2512
5571
8922

Source

2013 Multi-University Training Contest 7

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>

using namespace std;

const int maxn=66000;

int n,k,id;
int mat[maxn][5];
int pos[maxn];
multiset<int> SET[50];

void init()
{
    id=0;
    int nn=1<<k;
    for(int i=0;i<nn;i++)
        SET[i].clear();
}

int getSum(int id,int x)
{
    int sum=0;
    for(int i=0;i<k;i++)
    {
        if(x&(1<<i)) sum+=mat[id][i];
        else sum-=mat[id][i];
    }
    return sum;
}

void add(int x)
{
    int nn=1<<k;
    for(int i=0;i<nn;i++)
    {
        int xx=getSum(x,i);
        SET[i].insert(xx);
    }
}

void rm(int x)
{
    int nn=1<<k;
    for(int i=0;i<nn;i++)
    {
        int xx=getSum(x,i);
        SET[i].erase(SET[i].find(xx));
    }
}

int check()
{
    int nn=1<<k;
    int ans=0;
    for(int i=0;i<nn;i++)
    {
        multiset<int>::iterator S,E;
        S=SET[i].begin();
        E=SET[i].end();
        E--;
        ans=max(ans,*E-*S);
    }
    return ans;
}

int main()
{
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        init();
        int kind;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&kind);
            if(kind==0)
            {
                for(int j=0;j<k;j++)
                {
                    scanf("%d",&mat[id][j]);
                }
                add(id);
                pos[i+1]=id;
                id++;
            }
            else
            {
                int rmid;
                scanf("%d",&rmid);
                rm(pos[rmid]);
            }
            printf("%d\n",check());
        }
    }
    return 0;
}
时间: 2024-10-06 19:54:49

HDOJ 4666 Hyperspace 最大曼哈顿距离的相关文章

HDU 4311&amp;4312 Meeting point-1&amp;2 (曼哈顿距离&amp;&amp;切比雪夫距离)

HDU 4311 题意:平面上有n个点,一个点(x,y)只能到达(x-1,y), (x+1,y), (x, y-1), (x, y+1)4个点.从n个点中找到一点,使其他点到此点的距离之和最小. 思路: 可以发现,两个点间距离为 |x1-x2| + |y1-y2| ,这便是两点间的曼哈顿距离. 朴素的做法是遍历所有点,枚举该点与其他点间的曼哈顿距离之和,但是会TLE: 取巧的做法是将所有点与中心点的曼哈顿距离排序,枚举中间大概250个点左右的情况比较即可(不要欺负人家数据水! 正确姿势: 用结构

HDU4312 Meeting point-2 (切比雪夫距离&amp;&amp;曼哈顿距离)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4312 题意:给定平面坐标上n(n<=100000)个点,然后在其中选一个,使得所有点到当前点的Chebyshev距离和最小. 分析: 切比雪夫距离:设a(x1,y1),b(x2,y2);DIS = max(|x1-x2|,|y1-y2|) = (|x1-x2+y1-y2|+|x1-x2-y1+y2|)/2; 我们将点aa的坐标看成(x1+y1,x1-y1),bb的坐标看成(x2+y2,x2-y2)

HDU4311 Meeting point-1(曼哈顿距离)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4311 题意: 给定n个点,选其中的一个点作为起点,然后使其他点到这个点的曼哈顿距离最小,求这个最小的距离 分析: 我们设P作为这个点作为起点 然后 ans = sum(abs|pi.x-p.x|+|pi.y-p.y| )(1<=i<=n) 我们可以对其分别按x,y进行排序,就可以去掉绝对值符号 然后化简后的公式就可以变成 设这个点在按x排完序后的位置为i; 设tot[i],表示到序号i为止的点的

BZOJ 2735: 世博会 主席树+切比雪夫距离转曼哈顿距离

2735: 世博会 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 124  Solved: 51[Submit][Status][Discuss] Description 四年一度的世博会又要举办了,Q国很荣幸成为了这次世博会的主办方.Q国主席QQ从全国各地收集了N件物品排成 一排,作为Q国馆的展出物.对于相邻摆放的一些物品,如果过于相似会让人觉得无聊,如果差别过大又会让人觉 得突兀.为了让人们对这次世博会的展出满意,QQ需要知道一些相邻物品的“

一道曼哈顿距离的数学题

藏妹子之处(excel) 试题描述 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件:(1)任意两个单元格都不在同一行.(2)任意两个单元格都不在同一列.选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|).狗狗想知道的是,花费在minT到maxT之间的方案数有多少.答案模1000000007.所谓的

Codeforces 491B. New York Hotel 最远曼哈顿距离

最远曼哈顿距离有两个性质: 1: 对每个点(x,y)  分别计算  +x+y , -x+y , x-y , -x-y 然后统计每种组合的最大值就可以了, 不会对结果产生影响 2: 去掉绝对值 , 设正号为0负号为1 则 两个点的符号是可以通过异或的得到的. 如两个点 P(x,y) 和 Q(a,b) 若去掉绝对值符号后P的两个坐标为 -x +y 既对应数字 10  那么Q对应的数字则为 01 既 +a -b 两个点的曼哈顿距离为 -x +y +a -b B. New York Hotel time

【HDU 4311】Meeting point-1(前缀和求曼哈顿距离和)

题目链接 正经解法: 给定n个点的坐标,找一个点,到其他点的曼哈顿距离之和最小.n可以是100000.大概要一个O(nlogn)的算法.算欧几里得距离可以把x和y分开计算排好序后计算前缀和就可以在O(1)时间内判断一个点到其他点的距离. #include<cstdio> #include<algorithm> using namespace std; #define ll long long #define N 100005 int t,n; ll ans,sum[N],sx[N]

!HDU 4311 最小曼哈顿距离-思维&amp;卡时间-(横纵坐标分开算,排序)

题意:有n个点,求以这n个点中的某一点为起点,到各点的曼哈顿距离和最小是多少 分析: 暴力枚举又要超时,这种题一般都是考思维了,多半都是用技巧找到一个高效的方法.个人觉得这题跟上一篇文章的题是一个类型.这种思想要记住. 这题也是用"分治",虽说题目要求的是曼哈顿距离,但是我们为什么真的就要一步到位的求呢,可以横纵坐标分开求,先x排序,然后遍历一遍,求出横坐标的距离,然后y排序,遍历一遍求出坐标的距离加在刚才求得的x的距离上,就是曼哈顿距离了. 这里有一个非常巧妙但是其实很显而易见的东西

hdu4311 曼哈顿距离

http://acm.hdu.edu.cn/showproblem.php?pid=4311 Problem Description It has been ten years since TJU-ACM established. And in this year all the retired TJU-ACMers want to get together to celebrate the tenth anniversary. Because the retired TJU-ACMers ma