loj#2334 「JOI 2017 Final」JOIOI 王国

分析

二分答案

判断左上角是否满足

为了覆盖所有范围

我们依次把右下角,左上角,右上角移动到左上角

代码

#include<bits/stdc++.h>
using namespace std;
int a[2010][2010],n,m,Ans=1e9+7,mx,mn=1e9+7;
inline bool ck(int x){
    int i,j,k,l=mn+x,r=mx-x,lim=m;
    for(i=1;i<=n;i++){
      for(j=1;j<=lim;j++)
        if(a[i][j]<r)break;
      lim=min(lim,j-1);
      for(j=lim+1;j<=m;j++)
        if(a[i][j]>l)return 0;
    }
    return 1;
}
inline void work(){
    if(ck(0)){
      puts("0");
      exit(0);
    }
    int le=0,ri=mx-mn;
    while(ri-le>1){
      int mid=(le+ri)>>1;
      if(ck(mid))ri=mid;
        else le=mid;
    }
    Ans=min(Ans,ri);
    return;
}
int main(){
    int i,j,k;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
        scanf("%d",&a[i][j]),mn=min(mn,a[i][j]),mx=max(mx,a[i][j]);
    work();
    for(i=1;i<=n/2;i++)swap(a[i],a[n-i+1]);
    work();
    for(i=1;i<=n;i++)reverse(a[i]+1,a[i]+m+1);
    work();
    for(i=1;i<=n/2;i++)swap(a[i],a[n-i+1]);
    work();
    cout<<Ans;
    return 0;
}

原文地址:https://www.cnblogs.com/yzxverygood/p/11611584.html

时间: 2024-07-31 14:31:06

loj#2334 「JOI 2017 Final」JOIOI 王国的相关文章

loj 2759「JOI 2014 Final」飞天鼠

loj 这题有在一棵树上上升或者下降的操作,稍加分析后可以发现上升操作如果不是一定要做(指高度不足以到下一棵树或者是最后到达\(n\))就不做,下降操作也是如果不是一定要做(指到达下一棵树时高度过高)就不做,因为如果提前做了,可能会导致后面要浪费一些步数使得移动合法.然后这个移动过程就会分成两段,先是一直移动或者下降,不用上升,然后会每次上升再移动,一直到终点 先看前一段的移动,如果移动的时候正好能移到下一棵树就直接移,如果移的时候高度过高就往下移一点直到能正好移动到下一棵树上.这里对每个点记\

loj 3014「JOI 2019 Final」独特的城市

loj 我本来是直接口胡了一个意思一样的做法的,但是因为觉得有点假+实现要用并查集(?)就卡了好一会儿... 对于一个点\(x\)来说,独特的点一定在它的最长链上,如果有独特的点不在最长链上,那么最长链上一定有和他到\(x\)距离相同的点,矛盾 然后对于一个点,最长链端点一定可以是直径的两端点之一,所以如果我们分别以树的直径的两端点为根进行dfs,那么一个点在其中一次dfs中,独特的点都会在到根的路径上,所以我们用栈维护到根的点,然后不同颜色数开桶来维护,每次压栈或弹栈时改变桶内元素个数,然后根

Libre OJ P2332「JOI 2017 Final」焚风现象【差分思想】By cellur925

题目传送门 这道题开始看起来会很晕...\(qwq\).首先我们要明确题目中的海拔&&温度.温度是受海拔影响的,每次改变的是海拔,我们求的是温度. 我们开始读入的时候便可以处理出开始\(N\)位置的温度以及各个位置的海拔差.每次读入影响的是一段区间,区间内的相对海拔是不变的因此温度也不会变.只有区间的边界可能受到影响.因此我们只要处理边界就行了:这便是差分的思想. 比如有\([l,r]\)区间需要处理,那么我们把\(l\)位置的原答案减去,把\(l\)位置的海拔改变,并加上新答案.再对\(

【2018.10.1】「JOI 2014 Final」年轮蛋糕

题面 一看到求“最小值的最大值”这种问题,就能想到二分了. 二分答案,然后判然后把环展开成2倍长度的链,先钦定一个起点, 原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/9734669.html

【2018.9.20】JOI 2017 Final T3「JOIOI 王国 / The Kingdom of JOIOI」

题目描述 为了兼顾表意清楚与简洁,我翻译时脑补了 RJOIR_{JOI}R?JOI?? 和 RIOIR_{IOI}R?IOI??,所以不要问我为啥原题找不到…… JOIOI 王国是一个 HHH 行 WWW 列的长方形网格,每个 1×11\times 11×1 的子网格都是一个正方形的小区块.为了提高管理效率,我们决定把整个国家划分成两个省 JOI 和 IOI . 我们定义,两个同省的区块互相连接,意为从一个区块出发,不用穿过任何一个不同省的区块,就可以移动到另一个区块.有公共边的区块间可以任意移

loj #6091. 「Codeforces Round #418」幻想特快

#6091. 「Codeforces Round #418」幻想特快 1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<queue> 6 using namespace std; 7 #define maxn 10000 8 int n,a[maxn],b[maxn],p[maxn],nxt1,nxt2,tot,

[loj #6003]「网络流 24 题」魔术球 二分图最小路径覆盖,网络流

#6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 假设有 n nn 根柱子,现要按下述规则在这 n nn 根柱子中依次放入编号为 1,2,3,4,? 1, 2, 3, 4, \cdots1,2,3,4,? 的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何 2 22 个相邻球的编号之和为完全平方数. 试设计一个算法,计算出在

LOJ #6008. 「网络流 24 题」餐巾计划

#6008. 「网络流 24 题」餐巾计划 题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_ir?i?? 块餐巾.餐厅可以购买新的餐巾,每块餐巾的费用为 P PP 分:或者把旧餐巾送到快洗部,洗一块需 M MM天,其费用为 F FF 分:或者送到慢洗部,洗一块需 N NN 天,其费用为 S SS 分(S<F S < FS<F). 每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗.

LOJ #6010. 「网络流 24 题」数字梯形

#6010. 「网络流 24 题」数字梯形 题目描述 给定一个由 n nn 行数字组成的数字梯形如下图所示.梯形的第一行有 m mm 个数字.从梯形的顶部的 m mm 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径. 分别遵守以下规则: 从梯形的顶至底的 m mm 条路径互不相交: 从梯形的顶至底的 m mm 条路径仅在数字结点处相交: 从梯形的顶至底的 m mm 条路径允许在数字结点相交或边相交. 输入格式 第 1 11 行中有 2 22 个正整数 m mm 和