H - Perfect Ban (模拟)_Lyang0.0的博客-程序员秘密

技术标签: 模拟题  模拟  秋季集训  

题目链接:https://vjudge.net/problem/Gym-101341H

Constantine and Mike are playing the board game «Wrath of Elves». There are n races and m classes of characters in this game. Each character is described by his race and class. For each race and each class there is exactly one character of this race and this class. The power of the character of the i-th race and the j-th class equals to aij, and both players know it perfectly.

Now Constantine will choose a character for himself. Before that Mike can ban one race and one class so that Constantine would not be able to choose characters of this race or of this class. Of course, Mike does his best to leave Constantine the weakest possible character, while Constantine, on the contrary, chooses the strongest character. Which race and class Mike should ban?

Input

The first line contains two integers n and m (2 ≤ n, m ≤ 1000) separated by a space — the number of races and classes in the game «Wrath of Elves», correspondingly.

The next n lines contain m integers each, separated by a space. The j-th number in the i-th of these lines is aij (1 ≤ aij ≤ 109).

Output

In the only line output two integers separated by a space — the number of race and the number of class Mike should ban. Races and classes are numbered from one. If there are several possible answers, output any of them.

Examples

Input

2 2
1 2
3 4

Output

2 2

Input

3 4
1 3 5 7
9 11 2 4
6 8 10 12

Output

3 2

题目大意:随意删除一行一列,使矩阵剩下元素中的最大值是所有删除情况的最小情况。(哇 感觉自己的语言非常到位)

思路概括:根据贪心的思想,我们所删除的行和列应该是尽可能的包含可能多的大数,我们首先确定矩阵最大元素所在的行和列,那这个最大值我们是一定要删除的,所以下一个要寻找的应该是分别除去最大值所在行 列的次大值(如果只单纯的除去最大值找次大值的话,会忽略一种情况,就是我们的次大值和最大值在同一行同一列的情况,这样的话,我们必然是要删除最大值的行或者列的,这个次大值就没有了意义,偷偷告诉大家,这种情况就是这个题的样例8哦,我可是wa了好多发呢,qwq),我们找到次大值之后, 我们肯定是要删除的是(最大值的行,次大值的列) 或者 (次大值的行,最大值的列) 这其中的一种情况的, 那我们怎么判断删除哪种呢, 我们就可以非常直接的暴力跑这两种情况中矩阵剩下的元素哪种情况的小,这样就结束啦!!(撒花 撒花) 嘻嘻~

附上我千锤百炼的ac代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;

ll a[1050][1050];
ll n, m;

int main()
{
    ios::sync_with_stdio(false);
    cin >> n >> m;
    ll minx = -INF;
    ll x = 0, y = 0;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cin >> a[i][j];
            if(a[i][j] > minx)
            {
                minx = a[i][j];
                x = i;
                y = j;
            }
        }
    }//找出最大值的行和列



    ll maxx1 = -INF, maxx2 = -INF;
    ll xx = 0, yy = 0;
    ll xx2 = 0, yy2 = 0;
    for(int i=1; i<=n; i++)
    {
        if(i == x) continue;
        for(int j=1; j<=m; j++)
        {
            if(a[i][j] > maxx1)
            {
                maxx1 = a[i][j];
                xx = i;
                yy = j;
            }
        }
    }//不算最大值的行找出的次大值
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(j == y) continue;
            if(a[i][j] > maxx2)
            {
                maxx2 = a[i][j];
                xx2 = i;
                yy2 = j;
            }
        }
    }//不算最大值的列找出的最大值

    if(maxx1 > maxx2) xx = xx2, yy = yy2;//判断不要行还是不要列



    ll minx1 = -INF, minx2 = -INF;
    for(int i=1; i<=n; i++)
    {
        if(i == x) continue;
        for(int j=1; j<=m; j++)
        {
            if(j == yy) continue;
            if(a[i][j] > minx1)
            {
                minx1 = a[i][j];
            }
        }
    }
    for(int i=1; i<=n; i++)
    {
        if(i == xx) continue;
        for(int j=1; j<=m; j++)
        {
            if(j == y) continue;
            if(a[i][j] > minx2)
            {
                minx2 = a[i][j];
            }
        }
    }//两种情况分别找出的次次大值
    if(minx1 > minx2)  cout << xx << ' ' << y << endl;
    else cout << x <<' ' << yy << endl;
    return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43588832/article/details/101078396

智能推荐

第一节:Android蓝牙系统_蓝牙bluedroid的系统权限_forester8888的博客-程序员秘密

第1章 Android蓝牙系统1.1 蓝牙技术简介蓝牙(Bleuetooth)原是十世纪统一了丹麦的一个国王的名字,现取其“统一”的含义,用来意在统一无线局域网通讯的标准的蓝牙技术。蓝牙技术是爱立信,IBM,Intel等世界5家著名大公司在1998年联合推出的一项无线通讯规范。随后成立的蓝牙技术特殊兴趣组织(SIG)来负责该技术的开发和技术协议的制定,如今全世界已有1800多家公司加盟该组

【历史上的今天】9 月 12 日:世界上第一块集成电路诞生;QNX 操作系统开源;苹果推出 iPhone X_历史上的今天的博客-程序员秘密

历史上的 9 月 12 日关键词是“创新”和“第一次”,这一天,第一架无线电操纵的无人驾驶飞机在美国试飞;世界上第一个集成电路诞生;苏联发射第一个登陆月球的人造卫星;QNX 第一次开源 Neutrino OS;苹果公司推出第一台全面屏手机 iPhone X。

MPI并行程序设计——Eclipse开发环境的搭建_陈靖_的博客-程序员秘密

上一篇文章OpenMP并行程序设计——Eclipse开发环境的搭建已经介绍了如何在Eclipse搭建OpenMP开发环境。这篇文章将介绍另一个并行编程技术——MPI开发环境的搭建。同样是在Eclipse上开发,个人觉得比较方便。 实话说,MPI使用起来没有OpenMP简便,还得安装指定的客户端MPICH。下面就先搭建一个MPI开发环境,然后跑一个MPI的计算PI的代码。注意:是在Windows环境下的开发配置。 首先,还是使用上一篇文章中下载的Eclipse版本(下载地址:http://www

java设置access-allow_Java中设置多个Access-Control-Allow-Origin跨域访问_崇九的博客-程序员秘密

1、如果服务端是Java开发的,添加如下设置允许跨域即可,但是这样做是允许所有域名都可以访问,不够安全。response.setHeader("Access-Control-Allow-Origin","*");2、为保证安全性,可以只添加部分域名允许访问,添加位置可以在下面三处任选一个。(1)可以在过滤器的filter的dofilter()方法种设置。(2)可以在servlet的get或者pos...

OpenCV2.4.10之samples_cpp_tutorial-code_learn-----ImgTrans(Laplace边缘检测和Sobel边缘检测,图像重映射)_poetliu的博客-程序员秘密

本系列学习笔记参考自OpenCV2.4.10之opencv\sources\samples\cpp\tutorial_code和http://www.opencv.org.cn/opencvdoc/2.3.2/html/genindex.html在图像处理中,往往需要对图像提取有效的边缘。本博文将介绍Laplace边缘检测和Sobel边缘检测。Demo源

从零开始学安全(三十八)●cobaltstrike生成木马抓肉鸡_weixin_30709061的博客-程序员秘密

链接:https://pan.baidu.com/s/1qstCSM9nO95tFGBsnYFYZw 提取码:w6ih 上面是工具 需要java jdk 在1.8.5 以上 实验环境windows在K8_CS_3.12\cobaltstrike 目录下允许cmd 在cmd 执行TeamServer.exe 192.168.11.247 你的密码回车点击Cobal...

随便推点

SpringBoot集成ZipKin实现链路跟踪_springboot zipkin_八五年的湘哥的博客-程序员秘密

SpringBoot集成ZipKin实现链路跟踪1、我们要做什么​ 当我们的服务器成千上万,当我们的模块上万成千,当我们的调用链路复杂如蜘蛛网时,我们突然发现一个小小的性能问题却不能快速定位到点!千万不要以为自己是神,当年那个觉得ELK日志分析系统多余的程序员已经被老板祭天!​ 废话有点多,今天我们要做的一件事非常简单,如何在一个多层调用的接口里快速查看它们的网络拓扑图并得到监控数据!2、我们要注意什么​ 但凡一个合格的辅助,都不能抢主力的经济,不然会影响主力DPS输出----性能轻损耗​

带你轻松了解python中OS模块常用的方法_python os_米多sir的博客-程序员秘密

python中OS模块常用的方法。os.getcwd(),os.chdir(path),os.listdir(path),os.mkdir(path),os.makedirs(path),os.remove(path),os.rmdir(path),os.removedirs(),os.system(command),os.rename(old,os.new),os.os.curdir,os.os.pardir

微信小程序开发之清除浮动坍塌两种方式_微信小程序清除浮动的方法_一只小小小蜜蜂的博客-程序员秘密

浮动:不属于正常的流布局,通过设置float属性,浮动框可以向左或向右移动,直到其外边缘碰到包含框或另一个浮动框为止。浮动坍塌:浮动框没有被包含进父元素中其他元素浮动框显示如下:原因分析:浮动区域在它当前位置向左浮动,直到父元素框,其他文本绕过。浮动元素不在普通流中,导致父元素忽略浮动元素高度,形成坍塌。解决方式:1、添加高度为0的元素清除浮动其他元素

Linux进程休眠和唤醒_BruceZhang的博客-程序员秘密

当进程以阻塞的方式通信,在得到结果前进程会挂起休眠。为了将进程以一种安全的方式进入休眠,我们需要牢记两条规则:一、永远不要在原子上下文中进入休眠。二、进程休眠后,对环境一无所知。唤醒后,必须再次检查以确保我们等待的条件真正为真简单休眠完成唤醒任务的代码还必须能够找到我们的进程,这样才能唤醒休眠的进程。需要维护一个称为等待队列的数据结构。等待队列就是一个进程链表,其中包含了等

数学建模——层次分析法(Matlab)【评价类问题】_建模吧的博客-程序员秘密

数学建模——层次分析法(Matlab)层次分析法建立递阶层次结构构造判断矩阵一致性检验计算总权重并排序建立递阶层次结构将决策问题分解为三个层次,最上层为目标层O,即…;最下层为方案层,即…;中间层为准则层,即…;(如图一所示)构造判断矩阵对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较,依据下表,构造出判断矩阵(O-C,C1-A,C2-A,C3-A)。且满足主对角线元素为1一致性检验下面展示一些 内联代码片。// clear;clcdisp('请输入判断矩阵A: ')%输

3、Gerrit用户项目权限管理_weixin_34335458的博客-程序员秘密

在gerrit中权限控制是基于群组的. 每个用户有一个或者多个群组, 访问权限被赋予这些群组.访问权限不能赋予个人用户在Gerrit系统自带下面的群组Anonymous UsersChange OwnerProject OwnersRegistered UsersAnonymous Users所有用户都是匿名用户成员, 所有用户都能继承Anonymous Users所有访问权...