HDU - 6435 Problem J. CSGO (曼哈顿距离变换)
题目大意:有两类武器(主武器和副武器),每类有若干把,每把武器都有一个基础属性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 (曼哈顿距离变换)的更多相关文章
- HDU - 6435 Problem J. CSGO 2018 Multi-University Training Contest 10 (二进制枚举+思维)
题意:有N个主武器(MW)和M个副武器(SW),每个武器都有自己的S值,和K个附加属性xi.要选取一对主副武器搭配,搭配后获得的性能由该公式得出: 求获得最大的性能为多少. 分析:由于|xm - xs ...
- Gym - 101955E The Kouga Ninja Scrolls (曼哈顿距离变换+线段树)
题意:有n个忍者(编号为1-n),每个忍者有三个属性:横坐标x,纵坐标y,所属门派c,要求支持三种操作: 1.改变第k个忍者的位置 2.改变第k个忍者的门派 3.查询编号为[l,r]之间的忍者中,所属 ...
- hdu 4311 & 4312 Meeting point 曼哈顿距离之和最小
hdu 4311 题意 平面上\(n(n\leq 1e5)\)个点,找一个点到其它所有点的曼哈顿距离之和最小. 思路 如果是找一个坐标使得所有点到其曼哈顿距离之和最小,那么将\(n\)个横坐标排个序, ...
- [HDU 4666]Hyperspace[最远曼哈顿距离][STL]
题意: 许多 k 维点, 求这些点之间的最远曼哈顿距离. 并且有 q 次操作, 插入一个点或者删除一个点. 每次操作之后均输出结果. 思路: 用"疑似绝对值"的思想, 维护每种状态 ...
- HDU 4311 Meeting point-1(曼哈顿距离最小)
http://acm.hdu.edu.cn/showproblem.php?pid=4311 题意:在二维坐标中有n个点,现在要从这n个点中选出一个点,使得其他点到该点的曼哈顿距离总和最小. 思路: ...
- hdu6435 Problem J. CSGO标程讲解以及改正标程的一个错误(本来第一个样例过不了2333) 以及 poj2926 五维曼哈顿距离模板
比赛的时候抄poj2926的模板,但改不来啊orz #include <iostream> #include <cstdio> #include <cstring> ...
- [hdu6435]Problem J. CSGO
题目大意:给定$n$个$A$类元素和$m$个$B$类元素,每类元素有值$S$和$k$个值$x_0,x_1,\dots,x_{k-1}(k\leqslant 5)$. 要求选出一个$A$类元素$a$和$ ...
- 【POJ 3241】Object Clustering 曼哈顿距离最小生成树
http://poj.org/problem?id=3241 曼哈顿距离最小生成树模板题. 核心思想是把坐标系转3次,以及以横坐标为第一关键字,纵坐标为第二关键字排序后,从后往前扫.扫完一个点就把它插 ...
- hdu 6435 CSGO(最大曼哈顿距离)
题目链接 Problem Description You are playing CSGO. There are n Main Weapons and m Secondary Weapons in C ...
随机推荐
- C学习笔记-流程控制
常用的流程图符号 起止框用于表示流程的开始或结束: 输入/输出框用平行四边形表示,在平行四边形内可以写明输入或输出的内容: 判断框用菱形表示,它的作用是对条件进行判断,根据条件是否成立来决定如何执行后 ...
- Sql 备忘——行号
SELECT row_number() over(order by Product.ID) as [row_number]
- Tei-Wei Kuo
一. A Commitment-based Management Strategy for the Performance and Reliability Enhancement of Flash-m ...
- 如何禁止谷歌浏览器隐藏url的www前缀
若要将Chrome浏览器的设置恢复为隐藏HTTP.HTTPS以及WWW前缀,则只需再次进入此页面: chrome://flags/#omnibox-ui-hide-steady-state-url-s ...
- Python全栈开发之7、面向对象编程进阶-类属性和方法、异常处理和反射
一.类的属性 1.@property属性 作用就是通过@property把一个方法变成一个静态属性 class Room: def __init__(self,name,length,width,he ...
- poco编译与运行
1.引言 Poco C++库是: 一系列C++类库,类似Java类库,.Net框架,Apple的Cocoa; 侧重于互联网时代的网络应用程序 使用高效的,现代的标准ANSI/ISO C++,并基于ST ...
- 设置gridView 行号 行号宽
gridView1.IndicatorWidth=30; //设置行号宽度 //对gridView1的CustomDrawRowIndicator事件进行操作 进行行号显示 private stati ...
- 剑指offer9:青蛙变态跳台阶,1,2,3……,n。
1. 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 2. 思路和方法 每个台阶都有跳与不跳两种情况(除了最后一个台阶),最后 ...
- uname、hostname命令
一.uname:显示系统信息. 语法: uname [OPTION] ... 描述 打印某些系统信息. 没有选项,与-s相同. -a,--all ...
- C++字符转换等常用方法
下面是C++中字符编码格式转换(包括ANSI转换为UTF8,UTF8转换为ANSI,ANSI转换为unicode,unicode转换为ANSI,UTF8转换为unicode,unicode转换为UTF ...