题目大意:有两类武器(主武器和副武器),每类有若干把,每把武器都有一个基础属性S,以及k个附加属性,让你选一把主武器M和一把副武器S,使得最大。

显然后面的和式是一个k维的曼哈顿距离,带绝对值符号不好算,因此要想办法把绝对值去掉。由于两点任意一个维度(设其值分别为a,b)的曼哈顿距离要么是a-b,要么是b-a,符号总是相反的,因此可以二进制枚举每一维的正负号,对主武器取最大值,对副武器取最小值,两者相减就可以得到最大的曼哈顿距离。中间可能有的值不合法,但不合法的值一定不是最优值,因此可以忽略。

至于基础属性,只要对主武器加上S,对副武器减去S就行了。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+,inf=0x3f3f3f3f3f3f3f3fll;
int n,m,k,a[N][],b[N][],Log[N];
ll Sa[N][<<],Sb[N][<<];
int main() {
Log[]=-;
for(int i=; i<N; ++i)Log[i]=Log[i>>]+;
int T;
for(scanf("%d",&T); T--;) {
scanf("%d%d%d",&n,&m,&k);
for(int i=; i<n; ++i) {
scanf("%d",&a[i][k]);
for(int j=; j<k; ++j)scanf("%d",&a[i][j]);
}
for(int i=; i<m; ++i) {
scanf("%d",&b[i][k]);
for(int j=; j<k; ++j)scanf("%d",&b[i][j]);
}
for(int i=; i<n; ++i) {
for(int S=; S<(<<k); ++S)Sa[i][S]=;
for(int j=; j<k; ++j)Sa[i][]+=a[i][j];
Sa[i][]+=a[i][k];
}
for(int i=; i<m; ++i) {
for(int S=; S<(<<k); ++S)Sb[i][S]=;
for(int j=; j<k; ++j)Sb[i][]+=b[i][j];
Sb[i][]-=b[i][k];
}
for(int S=; S<(<<k); ++S) {
for(int i=; i<n; ++i)Sa[i][S]=Sa[i][S^(<<Log[S])]-*a[i][Log[S]];
for(int i=; i<m; ++i)Sb[i][S]=Sb[i][S^(<<Log[S])]-*b[i][Log[S]];
}
ll ans=;
for(int S=; S<(<<k); ++S) {
ll mx=~inf,mi=inf;
for(int i=; i<n; ++i)mx=max(mx,Sa[i][S]);
for(int i=; i<m; ++i)mi=min(mi,Sb[i][S]);
ans=max(ans,mx-mi);
}
printf("%lld\n",ans);
}
return ;
}

HDU - 6435 Problem J. CSGO (曼哈顿距离变换)的更多相关文章

  1. HDU - 6435 Problem J. CSGO 2018 Multi-University Training Contest 10 (二进制枚举+思维)

    题意:有N个主武器(MW)和M个副武器(SW),每个武器都有自己的S值,和K个附加属性xi.要选取一对主副武器搭配,搭配后获得的性能由该公式得出: 求获得最大的性能为多少. 分析:由于|xm - xs ...

  2. Gym - 101955E The Kouga Ninja Scrolls (曼哈顿距离变换+线段树)

    题意:有n个忍者(编号为1-n),每个忍者有三个属性:横坐标x,纵坐标y,所属门派c,要求支持三种操作: 1.改变第k个忍者的位置 2.改变第k个忍者的门派 3.查询编号为[l,r]之间的忍者中,所属 ...

  3. hdu 4311 & 4312 Meeting point 曼哈顿距离之和最小

    hdu 4311 题意 平面上\(n(n\leq 1e5)\)个点,找一个点到其它所有点的曼哈顿距离之和最小. 思路 如果是找一个坐标使得所有点到其曼哈顿距离之和最小,那么将\(n\)个横坐标排个序, ...

  4. [HDU 4666]Hyperspace[最远曼哈顿距离][STL]

    题意: 许多 k 维点, 求这些点之间的最远曼哈顿距离. 并且有 q 次操作, 插入一个点或者删除一个点. 每次操作之后均输出结果. 思路: 用"疑似绝对值"的思想, 维护每种状态 ...

  5. HDU 4311 Meeting point-1(曼哈顿距离最小)

    http://acm.hdu.edu.cn/showproblem.php?pid=4311 题意:在二维坐标中有n个点,现在要从这n个点中选出一个点,使得其他点到该点的曼哈顿距离总和最小. 思路: ...

  6. hdu6435 Problem J. CSGO标程讲解以及改正标程的一个错误(本来第一个样例过不了2333) 以及 poj2926 五维曼哈顿距离模板

    比赛的时候抄poj2926的模板,但改不来啊orz #include <iostream> #include <cstdio> #include <cstring> ...

  7. [hdu6435]Problem J. CSGO

    题目大意:给定$n$个$A$类元素和$m$个$B$类元素,每类元素有值$S$和$k$个值$x_0,x_1,\dots,x_{k-1}(k\leqslant 5)$. 要求选出一个$A$类元素$a$和$ ...

  8. 【POJ 3241】Object Clustering 曼哈顿距离最小生成树

    http://poj.org/problem?id=3241 曼哈顿距离最小生成树模板题. 核心思想是把坐标系转3次,以及以横坐标为第一关键字,纵坐标为第二关键字排序后,从后往前扫.扫完一个点就把它插 ...

  9. hdu 6435 CSGO(最大曼哈顿距离)

    题目链接 Problem Description You are playing CSGO. There are n Main Weapons and m Secondary Weapons in C ...

随机推荐

  1. React组件优化

    父组件传值给子组件时只要文本框发生变化就会重新渲染render,我理解我会影响性能,记录下方法用这个生命周期 shouldComponentUpdate 的方法就可以解决子组件重复渲染的问题 shou ...

  2. 【Python】【demo实验19】【练习实例】【不同位数相同阿拉伯数字组成的数之和】

    原题: 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制. 我的代码: #!/usr/bin ...

  3. 关于tk.mybatis.spring.mapper.SpringBootBindUtil$SpringBoot2Bind.bind(SpringBootBindUtil.java:129) ~[mapper-spring-boot-autoconfigure-1.2.3.jar:na]的问题

    错误如下: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at tk.mybatis.spring.m ...

  4. Plsql配置后,sql语句可以简写 快速使用

    in=INSERT up=UPDATE se=SELECT fr=FROM wh=WHERE or=ORDER BY de=DELETE df=DELETE FROM sf=SELECT * FROM ...

  5. 编译错误ERROR C2027

    一个工程编译时出错! 费了很多时间,增加头文件都不可取,然后把source File文件下分的.cpp文件删除,然后编译通过.

  6. sqlalchemy定义mysql时间戳字段

    update_time = Column(TIMESTAMP, nullable=False, comment='更新时间戳', server_default=text('CURRENT_TIMEST ...

  7. Java EE Servlet相关的两个包

    Servlet in Java EE 在Java EE的规范API中(链接),Servlet相关联的最重要的两个Package为: 1.javax.servlet 包含了一系列接口和类,他们在一个Se ...

  8. 解决sql "Compatibility_199_804_30003" 和 "SQL_Latin1_General_CP1_CI_AS" 之间的排序规则冲突。

    关联条件加  COLLATE Compatibility_199_804_30003

  9. 题解 P2859 【[USACO06FEB]摊位预订Stall Reservations】

    题目链接: https://www.luogu.org/problemnew/show/P2859 思路: 首先大家会想到这是典型的贪心,类似区间覆盖问题的思路,我们要将每段时间的左端点从小到大排序, ...

  10. Java并发编程——线程池

    本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...