洛谷P3933 Chtholly Nota Seniorious
题目
https://www.luogu.com.cn/problem/P3933
顺便:中国珂学院
思路
看到此题先大喊一声“我永远喜欢珂朵莉!”
好了然后我们思考一下如何做此题。
我们跳转到问题:现在要问,所有合法的分法中,A区域的极差与B区域的极差 中间较大的一个的最小值是多少?
关键字提取,我们比较容易想到这题大概率是一个二分题,就是求一个最小的\(d\)值使得两部分的极差都\(\leq d\)。
然后我们来看对于某一个\(d\)怎么判定它合不合法。
AAAAA AAAAA AAAAA
AABAA BAAAA AAABB
ABBBA BBAAA AAABB
AABAA BAAAA ABBBB
AAAAA AAAAA BBBBB
(1) (2) (3)
观察一下切割的规则,发现实际上就是要求每一行\(中A\)的数量单调递减。当然这个结论其实是假的,因为
BBBBA ABBBB
BBBAA AABBB
BAAAA AABBB
BAAAA AAABB
AAAAA AAAAB
这些东西也是合法的。
但是可以注意到这些图形通过顺时针旋转\(90°,180°,270°\) 总可以变换到上述的情况。
于是我可以只考虑每行的A单调递减的情况。
那么判定方法也呼之欲出了,我们依次查看每一行,从左往右能分到A就分A,不能就跳到下一行,然后每一行A的上限是上一行A的个数,YY一下可知这种贪心策略是正确的。
这样A的部分就处理完了,然后判一下B的部分极差是否满足就可以了。
保证极差小于d,可以维护一个max和min。
这个题是我高二时联赛前模拟赛的一道题,当时完全没有思路,作为珂学家实在是很丢人qwq。
代码
点击查看代码
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int a[4][2001][2001];
int check(int k,int n,int m,int d){
int i,j,L;
int last[2001],mx=0,mn=inf;
memset(last,0,sizeof(last));
last[0]=m;
for(i=1;i<=n;++i){
for(j=1;j<=last[i-1];++j){
if(max(mx,a[k][i][j])-min(mn,a[k][i][j])<=d)
mx=max(mx,a[k][i][j]),mn=min(mn,a[k][i][j]);
else
break;
}
last[i]=j-1;
if(!last[i]) break;
}
mn=inf,mx=0;
for(i=n;i>=1;--i){
for(j=last[i]+1;j<=m;++j){
if(max(mx,a[k][i][j])-min(mn,a[k][i][j])<=d)
mx=max(mx,a[k][i][j]),mn=min(mn,a[k][i][j]);
else
return 0;
}
if(last[i]==m) return 1;
}
return 1;
}
int main(){
int i,j,n,m,N;
int ans=inf;
int mx=0,mn=inf;
scanf("%d%d",&n,&m);
N=max(n,m);
for(i=1;i<=n;++i){
for(j=1;j<=m;++j){
scanf("%d",&a[0][i][j]);
a[1][m-j+1][i]=a[0][i][j];
a[2][n-i+1][m-j+1]=a[0][i][j];
a[3][j][n-i+1]=a[0][i][j];
mx=max(mx,a[0][i][j]);
mn=min(mn,a[0][i][j]);
}
}
int L=0,R=mx-mn;
while(L<=R){
int mid=L+R>>1;
int flag=0;
flag|=check(0,n,m,mid);
flag|=check(1,m,n,mid);
flag|=check(2,n,m,mid);
flag|=check(3,m,n,mid);
if(flag) ans=min(ans,mid),R=mid-1;
else L=mid+1;
}
printf("%d",ans);
// system("pause");
return 0;
}
洛谷P3933 Chtholly Nota Seniorious的更多相关文章
- 洛谷P3933 Chtholly Nota Seniorious 【二分 + 贪心 + 矩阵旋转】
威廉需要调整圣剑的状态,因此他将瑟尼欧尼斯拆分护符,组成了一个nnn行mmm列的矩阵. 每一个护符都有自己的魔力值.现在为了测试圣剑,你需要将这些护符分成 A,B两部分. 要求如下: 圣剑的所有护符, ...
- 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心
题目链接 题意 给你一个N*M的矩阵 (N,M <=2000) 把他分成两部分 使两部分的极差较大的一个最小 求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...
- 【Luogu】P3933 Chtholly Nota Seniorious
[题意]将n*m矩阵分成两个区域,要求满足一定条件,求两区域内部极差较大值最小.n,m<=2000 [算法]二分 [题解]极差的数值满足单调性,所以考虑二分极差. 对于给定的极差,将所有数值排序 ...
- Chtholly Nota Seniorious
题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg こんなにも.たくさんの幸せをあの人に分けてもらった だから.きっと 今の.私は 谁が何と ...
- noip模拟赛 Chtholly Nota Seniorious
题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg こんなにも.たくさんの幸せをあの人に分けてもらった だから.きっと 今の.私は 谁が何と ...
- 洛谷 P4171 [JSOI]满汉全席
洛谷 最近刚刚学的2-sat,就刷了这道裸题. 2-sat问题一般是用tarjan求的,当出现(x,y)或(!x,y)或(x,!y)三种选择时,我们可以把!x->y,!y->x连边. 然后 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
随机推荐
- 实时采集MySQL数据之轻量工具Maxwell实操
@ 目录 概述 定义 原理 Binlog说明 Maxwell和Canal的区别 部署 安装 MySQL准备 初始化Maxwell元数据库 Maxwell进程启动 命令行参数 配置文件 实时监控Mysq ...
- 【转载】EXCEL VBA 自动筛选—AutoFilter方法
AutoFilter方法的语法及说明 下面是Range对象的AutoFilter方法的语法: Range对象.AutoFilter(Field,Criterial1,Operator,C ...
- 使用C语言编程的7个步骤
版权声明 本文作者:main工作室 本文链接:https://www.cnblogs.com/main-studio/p/17034891.html 版权声明:本文为 博客园 博主「main工作室」的 ...
- Excelize 2.7.0 发布, 2023 年首个更新
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准.可以使用它来读取.写入由 Microsoft Exc ...
- 线性构造treap
数据结构 线性构造treap treap的线性构造可以使复杂度锐减到\(O(n)\),很优秀 treap的本质就是小根堆+二叉搜索树,即保证val满足搜索树的同时,维护rad的小根堆. 现在我们先把数 ...
- 【Django drf】 序列化类常用字段类和字段参数 定制序列化字段的两种方式 关系表外键字段的反序列化保存 序列化类继承ModelSerializer 反序列化数据校验源码分析
目录 序列化类常用字段类和字段参数 常用字段类 常用字段参数 选项参数 通用参数 序列化类高级用法之source source填写类中字段 source填写模型类中方法 source支持跨表查询 定制 ...
- 腾讯出品小程序自动化测试框架【Minium】系列(四)API详解(上)
写在前面 不知道是不是因为之前出过书的原因,在写教程之类的文章,会潜意识有自带目录和章节的感觉在里面,有点说不出的感觉吧. 上篇文章我们介绍了关于元素定位的使用方法,这篇文章将为大家分享关于Miniu ...
- dapr本地托管的服务调用体验与Java SDK的Spring Boot整合
1 简介 之前在文章<dapr入门与本地托管模式尝试>中介绍了dapr和本地托管,本文我们来介绍如果在代码中使用dapr的服务调用功能,并把它整合到Spring Boot中. Dapr服务 ...
- 你想成为.Net 7的技术高手吗?来这里看看
前言: 你是否时常觉得,整天搞些Curd和增删改查.这些毫无意义的东西,完全是浪费生命.想要进阶,成为高手.却苦于找不到方法,没有一套系统性的东西. 有鉴于此,新建了一个群,方便大家一起交流和分享一些 ...
- 重学c#系列—— IO流[三十四]
前言 简单介绍一下io流. 以前写过两篇,里面是java 语言写的,简单介绍了一下io流,这里是对io流的整理. https://www.cnblogs.com/aoximin/p/12007925. ...