洛谷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 ...
随机推荐
- uniapp(vue)实现点击左侧菜单,右侧显示对应的内容
<template> <view class="container"> <view class="fication-search" ...
- AcWing340通信道路/ USACO2008 Telephone Line S
AcWing题目 洛谷题目 解题思路 首先可以得到一个很容易得到的贪心策略,将一条路径上最贵的(边权最大)的\(K\)条边删去,那么我们剩下的路径中最贵(边权最大)的路就是原本这条路径上帝\(K + ...
- HMS Core 3D流体仿真技术,打造移动端PC级流体动效
移动设备硬件的高速发展,让游戏行业发生翻天覆地的变化,许多酷炫的游戏效果不再局限于电脑端,玩家在移动端就能享受到场景更逼真.画质更清晰.体验更流畅的游戏服务.但由于移动设备算力不足,为了实现真实感的水 ...
- Codeforces Round #844 (Div. 1 + Div. 2, based on VK Cup 2022 - Elimination Round) A-D
比赛链接 A 题意 设计一条线路要贴着6个墙面走,从 \((a,b)\) 到 \((f,g)\) ,线路长度最短. 题解 知识点:模拟. 分类取最短即可. 时间复杂度 \(O(1)\) 空间复杂度 \ ...
- vue构建打包兼容操作(vue代码规范建议)-转载Vuejs项目不改动一行代码同时支持用Rollup,vue-cli,parcel构建的一些建议
- BUG日记之-----Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway.
在使用swagger进行测试的时候调用弹窗 解决办法: 在启动类添加@EnableSwagger2注解
- 常见非指纹built-in函数
unescape unescape() _函数_可对通过 escape() 编码的字符串进行解码. unescape("abcdefg") 'abcdefg' unescape(& ...
- 数学工具类Math-练习
数学工具类Math 概述 java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数.类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常 ...
- 阅读B2B使用手册随感
EDI 协议中最重要的协议之一AS2协议,几乎成为对安全性要求比较高的企业.监管机构的首选.在零售.物流.医药等行业,EDI都有广泛应用.据我所知,在医药行业,几乎全球重要的监管机构都在使用EDI, ...
- CSAPP 配套实验 DataLab
第一次写博客,当作随笔留给自己看吧,如果能帮到读者,是我的荣幸. 这是 CSAPP 的配套实验 DataLab,概括的来说就是在较严格的限制条件下把 15 个函数补充完整. 本人能力没有那么强,很多题 ...