10.3 T2

原创 2017年10月03日 20:05:07
T2

给你一个n*m的矩阵,R=每一行最小值的最大值,C=每一列最大值的最小值,求最少修改多少数使R=C。
1 ≤ n, m ≤ 2, 000,0 ≤ Ai, j ≤ 1000,000

分析

呃。。。这题其实我用了一个fkcdalao讲的玄学方法。。。正解O(n*m)不过很麻烦。。。于是。。。蒟蒻打了一个卡过的排序+二分O(n*mlogn)。。。
好像还能用堆和线段树等等奇怪的方法,不过数据结构貌似都被卡了,开了O2后排序+二分很稳。。。


没错上面的都是废话
1、对每一行从小到大排序,f1取排序后每一列最大值
2、对每一列从大到小排序,f2取排序后每一行最小值
3、枚举R=C=x,容易发现x一定在矩阵中出现过否则不是最优
4、二分找有几个f1中最大值比x小,几个f2中的最小值比x大,加起来为x的答案
(这里需要特判一下,因为如果x是最大(小)的,并且x没有出现在矩阵中过,那么答案不是0而是1)

Code

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
bool flag1[3000005],flag2[3000005];
int n,m,type,a[2005][2005],f1[2005][2005],f2[2005][2005],maxx[2005],minn[2005];
long long read()
{
    char last='+',ch=getchar();
    while (ch<'0' || ch>'9') last=ch,ch=getchar();
    long long ans=0;
    while (ch<='9' && ch>='0')
    {
        ans=ans*10+(ch-48);
        ch=getchar();
    }
    if (last=='-') ans=-ans;
    return ans;
}
bool cmp(int x,int y)
{
    return x>y;
}
int find1(int x)
{
    int l=0,r=m;
    while (l<r)
    {
        //printf("%d %d\n", l, r);
        int mid=(l+r+1)>>1;
        if (maxx[mid]<x) l=mid;
        else r=mid-1;
    }
    return l;
}
int find2(int x)
{
    int l=0,r=n;
    while (l<r)
    {
        //printf("%d %d\n", l, r);
        int mid=(l+r+1)>>1;
        if (minn[mid]>x) l=mid;
        else r=mid-1;
    }
    return l;
}
int calc(int x)
{
    //printf("%d ",x);
    int s1=find1(x);
    //printf("%d ",s1); 
    int s2=find2(x);
    //printf("%d\n",s2);
    if (s1==0 && !flag1[x]) s1=1;
    if (s2==0 && !flag2[x]) s2=1;
    return s1+s2;
}
int main()
{
    freopen("exciting.in","r",stdin);
    freopen("exciting.out","w",stdout);
    n=read(),m=read(),type=read();
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++) a[i][j]=read();    
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=m; j++) f1[i][j]=a[i][j];
        sort(f1[i]+1,f1[i]+1+m);
        flag1[f1[i][1]]=1;
    }
    for (int i=1; i<=m; i++)
    {
        for (int j=1; j<=n; j++) f2[i][j]=a[j][i];
        sort(f2[i]+1,f2[i]+1+n,cmp);
        flag2[f2[i][1]]=1;
    }
    for (int i=1; i<=m; i++) 
    {
        for (int j=1; j<=n; j++) maxx[i]=max(maxx[i],f1[j][i]);
        //printf("%d\n", maxx[i]);
    }
    for (int i=1; i<=n; i++)
    {
        minn[i] = 3000005;
        for (int j=1; j<=m; j++) minn[i]=min(minn[i],f2[j][i]);
        //printf("%d\n", minn[i]);
    }
    minn[0]=3000005;
    int ans=n*m;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
        {
            ans=min(ans,calc(a[i][j]));
        }
    printf("%d\n",ans);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

使用内部T2定时器制作时钟

使用内部T2定时器制作时钟   目标: 使用89c52内部T2定时器制作时钟,每10ms中断一次,自动装载初值,向上计数溢出。     定时器2的资料:   ...
  • qq910876301
  • qq910876301
  • 2013年10月09日 20:18
  • 1454

ArcGIS 10.3_新特性全面来袭

以用户为中心(Named User)的授权模式 ArcGIS 10.3采用了全新授权模式:Named User,即从"许可机器"转向"许可用户"。一旦用户成为许可用户(Named U...
  • sRhee
  • sRhee
  • 2017年04月18日 15:23
  • 925

磁共振中的T1, T2 和 T2*的原理和区别

从物理的角度,要理解这几个概念的区别,需要对原子核的磁化有所了解,本文通过一些图示对这几个概念进行简明的介绍。 首先,磁共振最基本的原理就是氢原子核在磁场中自旋运动时所具有的量子力学特性。在一个均匀磁...
  • taigw
  • taigw
  • 2015年04月02日 18:16
  • 22324

ArcGIS for Server 10.3.X 新型紧凑型缓存的解读和应用

早在2010年年底,牛魔王中王在其博客空间牛魔王的作坊中对ArcGIS 10中推出的紧凑型缓存格式进行了详细的解读,详见《ArcGIS 切片缓存紧凑文件格式分析与使用》。紧随着的4年时间里,ArcGI...
  • zssai2015
  • zssai2015
  • 2015年11月08日 17:05
  • 1556

NOIP2017普及组T2题解

NOIP2017普及组第二题详解
  • cggwz
  • cggwz
  • 2017年11月11日 20:51
  • 688

C++ 11 学习1:类型自动推导 auto和decltype

Cocos 3.x 用了大量的C++ 11 的东西,所以作为一个C++忠实粉丝,有必要对C++ 11进行一个系统的学习。 使用C++11之前,一定要注意自己使用的编译器对C++11的支持情况,有些编译...
  • liwenxin_at
  • liwenxin_at
  • 2015年09月20日 21:22
  • 1159

在WINDOWS 2003 R2下安装金蝶K3 V10.3版本

不得不吐槽老版本金蝶K3的挑剔,让人抓狂无语,
  • yongping8204
  • yongping8204
  • 2014年10月23日 22:51
  • 6126

浅析C#中的泛型

接触泛型很长时间了,但总没有时间对起做个总结,不得不说泛型是个好东西,能大大的减少我们的代码量,下面来说一下有关泛型的相关知识。  1.什么是泛型?  在介绍泛型之前,先看一个小的事例。 /...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2015年01月06日 10:14
  • 1379

iOS——TestFlight完美的iOS app测试方案

TestFlight——完美的iOS app测试方案 转载本文请保留以下原作者信息:  原作:onevcat http://www.onevcat.com/2012/01/testflight/...
  • gaodeying123
  • gaodeying123
  • 2015年04月17日 15:56
  • 521

ArcGIS 10.3 惊艳登场,打造新一代Web GIS最强“芯”

ArcGIS 10.3,隆重推出以用户为中心(Named User)的全新授权模式,超强的三维“内芯”,革新性的桌面GIS应用,可配置的服务器门户,即拿即用的Apps,更多应用开发新选择,数据开放新潮...
  • arcgis_all
  • arcgis_all
  • 2014年12月11日 13:54
  • 3260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:10.3 T2
举报原因:
原因补充:

(最多只允许输入30个字)