HDU 6435 Problem J. CSGO 杭电多校第十场

题目描述

You are playing CSGO.
There are n Main Weapons and m Secondary Weapons in CSGO. You can only choose one Main Weapon and one Secondary Weapon. For each weapon, it has a composite score S.
The higher the composite score of the weapon is, the better for you.
Also each weapon has K performance evaluations x[1], x[2], …, x[K].(range, firing rate, recoil, weight…)
So you shold consider the cooperation of your weapons, you want two weapons that have big difference in each performance, for example, AWP + CZ75 is a good choose, and so do AK47 + Desert Eagle.
All in all, you will evaluate your weapons by this formula.(MW for Main Weapon and SW for Secondary Weapon)

Now you have to choose your best Main Weapon & Secondary Weapon and output the maximum evaluation.

 

输入

Multiple query.
On the first line, there is a positive integer T, which describe the number of data. Next there are T groups of data.
for each group, the first line have three positive integers n, m, K.
then, the next n line will describe n Main Weapons, K+1 integers each line S, x[1], x[2], …, x[K]
then, the next m line will describe m Secondary Weapons, K+1 integers each line S, x[1], x[2], …, x[K]
There is a blank line before each groups of data.
T<=100, n<=100000, m<=100000, K<=5, 0<=S<=1e9, |x[i]|<=1e9, sum of (n+m)<=300000

 

输出

Your output should include T lines, for each line, output the maximum evaluation for the corresponding datum.

 

样例输入

2
2 2 1
0 233
0 666
0 123
0 456
2 2 1
100 0 1000 100 1000 100
100 0

 

样例输出

543
2000

题意是说选一把主武器MW和一把副武器SW,使得这个式子的值最大

 

如果我们读入数据的时候把副武器的S值改成他的相反数,那么这道题就可以看成从两个六维空间下的点集中各选出一个点,求最远的六维曼哈顿距离。

求最远曼哈顿距离其实很简单,比如二维下的曼哈顿距离|xi-xj|+|yi-yj|,那么对于点i来说,去掉绝对值以后,xi会变成±xi,yi会变成±yi,我们设+为1,-为0,那么用一个数tmp的二进制就可以表示xi、yi的正负情况。在同一个状态下(如tmp==2),2的二进制是10,即+x-y,我们枚举每个点的x-y,从中选出最大值与最小值并相减(设xi-yi最大,xj-yj最小),那么相减的结果就是ans[2]=(xi-yi)-(xj-yj) = (xi-xj) + (yj -yi) <= |xi - xj| + |yi - yj|。我们计算出每个状态下的ans值,然后取最大值即为结果。比如在二维情况下,我们相减得到的结果化简后分别是  (xi-xj) + (yi-yj)、(xj-xi) + (yj-yi) 、(xi-xj) + (yj -yi)、(xj-xi) + (yj-yi),而|xi-xj|+|yi-yj|一定是这四种状态之一,所以其实就枚举出了所有的状态。

因为懒得分成两个集合,我把主武器的S值全部加上了1e10,这样主武器与主武器之间的距离、副武器与副武器之间的距离一定会小于任意一个主武器与副武器之间的距离。

#include <bits/stdc++.h>
typedef long long ll;
const int maxn = 100010;
int dem;  //维数
const ll INF = 0x3f3f3f3f;
struct Point{
   ll x[6];
} p[maxn << 1];
int n,m;
ll minx[100], maxx[100];
ll solve()
{
    int tmp = 1 << dem;
    for(int i = 0; i < tmp; i++)
    {
        minx[i] = INF;
        maxx[i] = -INF;
    }
    for(int i = 0; i < n + m; i++)
    {
        for(int j = 0; j < tmp; j++)
        {
            int t = j;
            ll s = 0;
            for(int k = 0; k < dem; k++)
            {
                if(t & 1) 
                    s += p[i].x[k];
                else 
                    s -= p[i].x[k];
                t >>= 1;
            }
            if(maxx[j] < s)
                maxx[j] = s;
            if(minx[j] > s)
                minx[j] = s;
        }
    }
    ll ans = -INF;
    for(int i = 0; i < tmp; i++)
        if(maxx[i] - minx[i] > ans)
            ans = maxx[i] - minx[i];
    return ans - 10000000000;
}
int main()
{
//    freopen("in.txt", "r", stdin);
    int tt;
    scanf("%d", &tt);
    while(tt--)
    {
        scanf("%d%d%d", &n, &m, &dem);
        dem++;
        for(int i=0; i<n; i++)
        {
            for (int j = 0; j < dem; j++)
                scanf("%lld", &p[i].x[j]);
            p[i].x[0] += 10000000000;
        }
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<dem; j++)
              scanf("%lld", &p[i + n].x[j]);
            p[i + n].x[0] = -p[i + n].x[0];
          }
        printf("%lld\n", solve());
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值