B. LuoTianyi and the Table

news2024/9/23 12:04:17

题目链接
Codeforces Round 872 (Div. 2)
在这里插入图片描述
Example
input

5
2 2
1 3 1 4
2 2
-1 -1 -1 -1
2 3
7 8 9 -3 10 8
3 2
4 8 -3 0 -7 1
4 3
-32030 59554 16854 -85927 68060 -64460 -79547 90932 85063 82703 -12001 38762
output
9
0
64
71
1933711
在这里插入图片描述

题目大意:

每组测试给一个n和m,随后给出nm个数。
要求将这些数放进n
m的矩阵数组中,求上述式子的最大值。
其实每次都是取矩阵(1,1)到(i,j)这个子矩阵中最大值和最小值,将最大值减去最小值即可,最后将所有的值相加。

解题思路:

因为数字放的位置不同,最后的结果可能会有变化,但会注意到每次是取矩阵中的最大值和最小值,那么就分两种情况:
1.最大值只有一个,那么最大值就应该放在(1,1)的位置,然后取max(n,m),如果行数比列数大,那么最小值就放在(2,1)的位置,否则放在(1,2)的位置,然后第二小的值放在(2,1)/(1,2)剩下的位置
2.最小值只有一个,其实情况和最大值一样,至是一开始是最小值放在(1,1)的位置!
将两种情况取最大值即可

在这里插入图片描述
这里简单推到一下,因为是取矩阵的最大值和最小值,如果最大值和最小值已经在蓝色和红色的区域,那么剩下的值就会被随机放在其他位置。但会发现,绿色区域的值,永远都是数组b里面最大值-最小值。

在这里插入图片描述
这是情况1最大值只有1,而且列数比行数多,也就是说红色区域比蓝色区域大,那么最小值会放在(1,2),如果随机取i,j,也就是紫色区域,那么从(0,0)到(i,j)的矩阵就是红蓝和橙色圈起来的,会发现该矩阵一定会包含最大值和最小值。证明结束。

反证(证明为什么如果列数比行数多,小一放在(1,2)):如果小一不放在(1,2),那么(1,2)这个子矩阵的值是 最大值-n=ans1,如果是小一放在里面 ans2=最大值-小一,明显ans1<ans2,如果小一越“远离”(1,1)那么将会有更多的子矩阵的值比该方法小。而为什么不放(2,1)原因很简单,如下图,如果放在(1,2)将会有3个子矩阵是最大值,而放在(1,2)只有2个子矩阵是最大值!

在这里插入图片描述
C++

#include <iostream>
#include <algorithm>
#define int long long
using namespace  std;
const int N = 101 * 101 +101;
int a[N];
signed main(void){
    int t;cin>>t;
    while(t--){
        int n,m;cin>>n>>m;
        for(int i=0;i<n*m;i++){
            scanf("%lld",&a[i]);
        }
        sort(a,a+n*m);
        int minans=a[0];
        int minans2=a[1];
        int maxans=a[n*m-1];
        int maxans2=a[n*m-2];
        int maxnm=max(n,m);
        int minnm=min(n,m);
        int ans=(maxnm-1)*(maxans-minans)+(minnm-1)*(maxans2-minans)+(n*m-n-m+1)*(maxans-minans);

        int ans2=(maxnm-1)*(maxans-minans)+(minnm-1)*(maxans-minans2)+(n*m-n-m+1)*(maxans-minans);

        cout<<max(ans,ans2)<<endl;
    }
    return 0;
}

C语言

#include <stdio.h>
#include <limits.h>
#define int long long
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a>b?b:a;}
signed main(void){
    int t;
    scanf("%lld",&t);
    while(t--){
        int n,m;scanf("%lld%lld",&n,&m);
        int minans=LLONG_MAX;
        int minans2=LLONG_MAX;
        int maxans=LLONG_MIN;
        int maxans2=LLONG_MIN;
        int maxnm=max(n,m);
        int minnm=min(n,m);
        for(int i=0;i<n*m;i++){
            int num;scanf("%lld",&num);
            if(maxans<=num) {
                maxans2= maxans;
                maxans = num;
            }
            else if(maxans2<=num)maxans2= num;
            if(minans>=num) {
                minans2=minans;
                minans = num;
            }
            else if(minans2>=num)minans2=num;
        }
        int ans=(maxnm-1)*(maxans-minans)+(minnm-1)*(maxans2-minans)+(n*m-n-m+1)*(maxans-minans);

        int ans2=(maxnm-1)*(maxans-minans)+(minnm-1)*(maxans-minans2)+(n*m-n-m+1)*(maxans-minans);

        printf("%lld\n",max(ans,ans2));

    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 远程debug,IDEA 远程 Debug 调试

有时候我们需要进行远程的debug&#xff0c;本文研究如何进行远程debug&#xff0c;以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。 配置 远程debug的服务&#xff0c;以SpringBoot微服务为例。 首先&#xff0c;启动SpringBoot需要加上特定的参数。 …

【JUC】浅析ConcurrentLinkedQueue

【JUC】浅析ConcurrentLinkedQueue 文章目录 【JUC】浅析ConcurrentLinkedQueue一、前言二、ConcurrentLinkedQueue的结构三、入队列3.1、入队列的过程3.2、定位尾节点3.3、设置入队节点为尾节点3.4、HOPS的设计意图 四、出队列 一、前言 在并发编程中&#xff0c;有时候需要使…

本文主要介绍在VMware虚拟机里面安装windows sever 2012 R2并且配置hyper-V的过程,此外还涵盖出现问题的解决方案。

系列文章目录 Windows xp 在VMware虚拟机上面安装的详细步骤_xp系统虚拟机 虚拟机VMware里面安装Windows sever 2003版本详细教程 Windows配置虚拟网络 文章目录 系列文章目录 前言 一、配置的前提条件 1.1、实验环境 1.2、资源分享 二、安装教程 2.1、新建windows …

不同设备如何统一语言编程平台高效开发?本文为你揭秘

原文&#xff1a;不同设备如何统一语言编程平台高效开发&#xff1f;本文为你揭秘&#xff0c;点击链接查看更多技术内容。 随着数字化时代的发展&#xff0c;手机、平板、PC、电视、智能手表、车机等智能设备的普及率越来越高&#xff0c;但不同设备往往搭载了不同的操作系统。…

Word控件Spire.Doc 【文本框】教程(1):如何在 C 语言中设置 Word 文本框的内部边距

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

改写中文句子的软件-修改文章句子的软件

免费语句改写软件 您是否在写博客、新闻稿或者其他需要大量文本的场合中觉得无从下手&#xff1f;您是否为修改一段语句上耗费大量时间感到困扰&#xff1f;如果您有这样的烦恼&#xff0c;那么我向您介绍我们的免费语句改写软件&#xff0c;可以帮助您快速批量语句改写&#x…

“AI代劳”,跨域赋能“智慧企业”

随着全球数字信息化的到来&#xff0c;各大新兴行业企业也逐渐意识到“智慧化”转型的重要性&#xff0c;但目前仍有不少企业在面临着人力成本高、运营管理效率低、营销获客效果差、数据分析能力薄弱等瓶颈&#xff0c;那么&#xff0c;处于这些瓶颈期的企业该如何实现“智慧化…

Vue-弹层显示样式

弹层显示样式1 1.先将左侧样式写 <template><div classhome-category><ul class"menu"><li v-for"i in 10" :key"i"><RouterLink to"/">居家</RouterLink><RouterLink to"/">洗…

pd电源测试-PD电源自动测试系统ATECLOUD-Power

PD电源测试是一种重要的电源测试方法&#xff0c;采用该方法可以更加全面、详细地评估各种电子产品和设备的性能和安全性。本文将阐述PD电源测试的基本原理、测试对象以及测试的应用价值。 首先&#xff0c;PD电源测试的基本原理是通过对电压、电流、功率等重要指标进行测试评…

无论是企业或个人,你知道数据泄露有多严重吗?

现代科技的发展使我们的隐私越来越容易受到侵犯&#xff0c;互联网、社交媒体和智能手机等技术使我们的信息变得更加易于访问和共享。此外商业公司和机构也积极收集和利用我们的个人数据&#xff0c;这些公司和机构可能利用我们的数据来推销产品和服务&#xff0c;或者在不经过…

励志长篇小说《周兴和》书连载之二饥饿寒冷童年

饥饿寒冷童年梦 兴和至今也记得&#xff0c;这年冬天特别冷。 那一天&#xff0c;放了学的小兴和背着书篼&#xff0c;又冷又饿地从毛公乡小学出来&#xff0c;艰难地爬上了回家的那条山道。他已一天没吃东西了&#xff0c;肚皮早就饿得贴着脊梁骨了。爬上一个小山坡&#xff…

(六)实现好友管理:教你如何在即时通信系统中添加好友

文章目录 一、引言1.1 即时通信系统中用户增加好友功能的重要性和应用场景1.2 TCP连接传输用户增加好友请求的基本原理 二、实现用户增加好友功能2.1 实现用户好友列表的展示和管理2.1.1 使用QListWidgetItem控件展示好友列表客户端关键代码展示服务端关键代码展示 三、效果展示…

深度学习笔记之梯度下降、反向传播与内置优化器

文章目录 1. 梯度下降法2. 反向传播算法3. PyTorch内置的优化器3.1 SGD优化器3.2 RMSprop优化器3.3 Adam优化器 1. 梯度下降法 笔者往期的机器学习笔记&#xff1a; 机器学习之梯度下降算法 梯度下降法是一种致力于找到函数极值点的算法。 所谓“训练”或“学习”就是改进…

2023年跨境电商必读:海外网红营销的4大雷区及应对策略

随着跨境电商的快速发展和海外网红的普及&#xff0c;海外网红营销已成为越来越多跨境电商企业推广品牌的必备手段。然而&#xff0c;在进行海外网红营销时&#xff0c;企业需要注意一系列雷区&#xff0c;以确保营销的有效性和可持续性。本文Nox聚星将和大家探讨2023年跨境电商…

AI自动写文章_免费在线原创文章生成器

自动写文章生成器 自动写文章生成器是一种利用人工智能和自然语言处理技术&#xff0c;帮助用户快速生成文章的工具。该软件可以根据用户的需求和选择&#xff0c;自动生成符合要求的文章&#xff0c;无需手动编写和修改。 自动写文章生成器的主要功能包括以下几个方面&#…

(三)打造华丽的即时通信系统主界面,让你的聊天体验更有质感

文章目录 一、引言1、即时通信系统的基本概念和应用场景2、Qt框架在实现即时通信系统中的应用 二、主界面设计2.1 界面设计的基本要求2.2 主界面的设计 三、通信功能实现3.1 通信协议的选择3.1.1 TCP协议和UDP协议的优缺点比较3.1.2选择何种协议进行即时通信系统的实现 3.2 通信…

单片机的电子秤方案设计

电子秤是一种利用电子技术实现重量计量的设备&#xff0c;广泛应用于商业、工业、医疗、科学研究等领域。电子秤是一种高精度的计重装置&#xff0c;不仅精度高&#xff0c;而且使用方便、稳定可靠。下面&#xff0c;我们从结构设计、工作原理、功能参数、产品种类四个方面来介…

MyBatis基础知识点总结

MyBatis了解 MyBatis 是什么&#xff1f; MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis 可以使用简单的XML或注解用于配置和原始映射&#xff0c;将接口和Java的 POJO&#x…

Canvas 2D详解

在我书的第六章中有一个关于MNIST手写数字的例子&#xff0c;当数据集加载完成之后&#xff0c;用户可以在<canvas/>上输入手写数字&#xff0c;点击「预测」按钮之后&#xff0c;浏览器会弹出经模型预测之后的结果&#xff1b;在我书的第九章和第十章中&#xff0c;分别…