codechef [snackdown2017 Onsite Final] Minimax
题目描述
考虑一个 N 行 N 列的网格,行列编号均为 1 ∼ N。每个格子中包含一个整数。记 ri 为第 i 行的最小值,Ci 为第 i 列的最大值。我们称一个网格为好的,当且仅当满足:$$max(r1, . . . , rN ) = min(C1, . . . , CN )$$
大厨有这么一个网格,他可以将格子中的数字改为任意整数。请你告诉大厨,他至少需要改 变几个数字,才能使得网格变成好的。
输入格式
输入第一行,包含一个整数 N,代表网格的边长。 接下来 N 行,每行包含 N 个整数,代表每个格子中的整数。
输出格式
输出一个整数,代表最少需要改变的数字个数。
这是Easy难度题啊qaq,那我大概只能回去刷beginner了。
如果枚举一个最终k=max(ri)=max(li),那么代价就是一行内小于k的数字最少的数字数量加上一列内大于k的数字最少的数字数量,这样直接暴力是$O(n^4)$的。
然后窝尝试三分k的值(因为看起来是单峰的嘛),结果好像并不行……
回到暴力看一下,咦,这不是可以用堆优化一下嘛……复杂度$O(n^{2}logn)$
被人看着写博客催颓废是一种什么样的感受……
#include<queue>
#include<cstdio>
#include<cassert>
#include<algorithm>
#define fi first
#define se second
#define mp make_pair
#define MN 1100
using namespace std; struct na{int x,y;}p[];
int n,a[MN][MN],MMH=1e9,num=,r[MN],c[MN];
bool operator < (na x,na y){return a[x.x][x.y]<a[y.x][y.y];}
priority_queue<pair<int,int> > R,C;
int main(){
scanf("%d",&n); for (int i=;i<=n;i++) c[i]=n;
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
scanf("%d",&a[i][j]),p[++num].x=i,p[num].y=j;
sort(p+,p++num);
for (int i=;i<=n;i++) R.push(mp(,i)),C.push(mp(-n,i)); int _L=,_R=;
for (int k=;k<=;k++){
while (a[p[_R].x][p[_R].y]==k&&_R<=num) _R++;
for (int i=_L;i<_R;i++) c[p[i].y]--,C.push(mp(-c[p[i].y],p[i].y));
while (C.top().fi!=-c[C.top().se]) C.pop();
while (R.top().fi!=-r[R.top().se]) R.pop();
if (-C.top().fi-R.top().fi<MMH) MMH=-C.top().fi-R.top().fi;
for (int i=_L;i<_R;i++) r[p[i].x]++,R.push(mp(-r[p[i].x],p[i].x));
_L=_R;
} printf("%d\n",MMH);
}
codechef [snackdown2017 Onsite Final] Minimax的更多相关文章
- codechef [snackdown2017 Onsite Final] AND Graph
		传送门 题解给出了一个很强势的dp: i<K $$dp[i][len]*Fib[len+2-(t[i]==1)] -> dp[i+1][len]$$ $$dp[i][len]*Fib[le ... 
- codechef [snackdown2017 Onsite Final] Fusing Weapons
		传送门 题目描述 大厨最近迷上了一款勇者斗恶龙的游戏. 游戏每局开始前,会有 N 件武器摆成一圈.每件武器有一个整数的等级.大厨可以选择两件 相邻的等级相同(不妨设同为 A 级)的武器,将它们合成.这 ... 
- 退役前的最后的做题记录upd:2019.04.04
		考试考到自闭,每天被吊打. 还有几天可能就要AFO了呢... Luogu3602:Koishi Loves Segments 从左向右,每次删除右端点最大的即可. [HEOI2014]南园满地堆轻絮 ... 
- CROC 2016 - Final Round [Private, For Onsite Finalists Only] C. Binary Table FWT
		C. Binary Table 题目连接: http://codeforces.com/problemset/problem/662/C Description You are given a tab ... 
- [JZOJ6089]【CodeChef 2014 April Challenge】Final Battle of Chef【数据结构】【整体二分】
		Description \(n,q,V\leq 100000,w_i\leq 10^9\) Solution 又是一道大数据结构 由于有一个下取整,这就导致了不同时间的修改值是不能简单的直接加在一起的 ... 
- Forethought Future Cup - Final Round (Onsite Finalists Only) C. Thanos Nim 题解(博弈+思维)
		题目链接 题目大意 给你n堆石子(n为偶数),两个人玩游戏,每次选取n/2堆不为0的石子,然后从这n/2堆石子中丢掉一些石子(每一堆丢弃的石子数量可以不一样,但不能为0),若这次操作中没有n/2堆不为 ... 
- Gym 102056I - Misunderstood … Missing - [DP][The 2018 ICPC Asia-East Continent Final Problem I]
		题目链接:https://codeforces.com/gym/102056/problem/I Warm sunshine, cool wind and a fine day, while the ... 
- java抽象、接口 和final
		抽象 一.抽象类:不知道是具体什么东西的类. abstract class 类名 1.抽象类不能直接new出来. 2.抽象类可以没有抽象方法. public abstract class USB { ... 
- Java内部类final语义实现
		本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ... 
随机推荐
- layui动态设置下拉框数据,根据后台数据设置选中
			追加下拉框数据: 设置默认选中: 正常的判断这种情况是不行的,因为追加出的数据,在前台显示的并不是同一个下拉框,原来的下拉框被隐藏了 因此需要:根据原来的位置,寻找下一个节点,寻找子节点的方式找到相应 ... 
- iOS超全开源框架、项目和学习资料汇总--数据库、缓存处理、图像浏览、摄像照相视频音频篇
			iOS超全开源框架.项目和学习资料汇总--数据库.缓存处理.图像浏览.摄像照相视频音频篇 感谢:Ming_en_long 的分享 大神超赞的集合,http://www.jianshu.com/p/f3 ... 
- Oracle数据库部分迁至闪存存储方案
			Oracle数据库部分迁至闪存存储方案 1.实施需求 2.确认迁移表空间信息 3.确认redo信息 4.确认undo信息 5.表空间迁移到闪存 6.redo迁移到闪存 7.undo迁移到闪存 8.备库 ... 
- n年前,我没钱但年轻,我怕n年后我老时,还是一无所成——2017我的收获和反思
			记得当年我刚从学校里出来时,应该和现在的95后差不多,当时还是很惶恐的,怕找不到工作,怕无法挣到足够的钱买房子支撑家庭,(当然还有其它的担心点),却唯独没意识到自己拥有着最宝贵的财富:年轻. 年轻意味 ... 
- python 将文件夹内的图片转换成PDF
			import os import stringfrom PIL import Imagefrom reportlab.lib.pagesizes import A4, landscapefrom re ... 
- bzoj 3571: [Hnoi2014]画框
			Description 小T准备在家里摆放几幅画,为此他买来了N幅画和N个画框.为了体现他的品味,小T希望能合理地搭配画与画框,使得其显得既不过于平庸也不太违和.对于第 幅画与第 个画框的配对,小T都 ... 
- 初学ssm框架的信息
			ssm框架,就是Spring ,SpringMVC ,mybstis 的简称,我们是从mybstis 开始学起的,mybatis的作用作为一个连接数据库的框架,可以很好配置连接好数据库, 有mybat ... 
- touch事件应用
			js的touch事件,一般用于移动端的触屏滑动: $(function(){ document.addEventListener("touchmove", _touch, fals ... 
- K:java中的hashCode和equals方法
			hashCode和equals方法是Object类的相关方法,而所有的类都是直接或间接的继承于Object类而存在的,为此,所有的类中都存在着hashCode和equals.通过翻看Object类 ... 
- beanstalk 安装
			1.安装 # wget https://github.com/kr/beanstalkd/archive/v1.10.tar.gz # tar xzvf v1.10 # cd beanstalkd-1 ... 
