「ZJOI2007」「LuoguP1169」棋盘制作(并查集
题目描述
国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源于易经的思想,棋盘是一个8×88 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。
而我们的主人公小Q,正是国际象棋的狂热爱好者。作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定将棋盘扩大以适应他们的新规则。
小Q找到了一张由N×MN \times MN×M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色之一。小Q想在这种纸中裁减一部分作为新棋盘,当然,他希望这个棋盘尽可能的大。
不过小Q还没有决定是找一个正方形的棋盘还是一个矩形的棋盘(当然,不管哪种,棋盘必须都黑白相间,即相邻的格子不同色),所以他希望可以找到最大的正方形棋盘面积和最大的矩形棋盘面积,从而决定哪个更好一些。
于是小Q找到了即将参加全国信息学竞赛的你,你能帮助他么?
输入输出格式
输入格式:
包含两个整数NNN和MMM,分别表示矩形纸片的长和宽。接下来的NNN行包含一个N ×MN \ \times MN ×M的010101矩阵,表示这张矩形纸片的颜色(000表示白色,111表示黑色)。
输出格式:
包含两行,每行包含一个整数。第一行为可以找到的最大正方形棋盘的面积,第二行为可以找到的最大矩形棋盘的面积(注意正方形和矩形是可以相交或者包含的)。
输入输出样例
说明
对于20%20\%20%的数据,N,M≤80N, M ≤ 80N,M≤80
对于40%40\%40%的数据,N,M≤400N, M ≤ 400N,M≤400
对于100%100\%100%的数据,N,M≤2000N, M ≤ 2000N,M≤2000
题解
某天中午去吃超好吃的鱼粉,路上,一位选手问我们,
你知道悬线法是什么吗?!
我不知道,于是我问他是干嘛的,于是他洋洋洒洒的摆出了这道题。
我kiao,这不就是我校传了好几届的最大矩阵题吗?!
然后我把那道题改造了一下,成功AC。
————————————
跟原题不同的是,我们传承前缀和时的条件改为此位和上一位不同。
并且和左右接通时,判断是否不同。如果相同就不连。
/*
qwerta
P1169 [ZJOI2007]棋盘制作
Accepted
100
代码 C++,1.5KB
提交时间 2018-10-14 21:34:02
耗时/内存
29ms, 688KB
*/
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
#define R register
int s[];
int a[];
struct emm{
int nod,v;
};
struct cmp{
bool operator()(emm qaq,emm qwq){
return qaq.v<qwq.v;
}
};
priority_queue<emm,vector<emm>,cmp>q;
int siz[],fa[];
bool sf[];
int fifa(int x)
{
if(fa[x]==x)return x;
return fa[x]=fifa(fa[x]);
}
inline void con(int x,int y)
{
int u=fifa(x),v=fifa(y);
siz[u]+=siz[v];
fa[v]=u;
return;
}
inline int read()
{
char ch=getchar();
int x=;
while(!isdigit(ch))ch=getchar();
if(isdigit(ch)){if(ch=='')x=;ch=getchar();}
return x;
}
int main()
{
//freopen("a.in","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
int ansz=,ansc=;
for(R int i=;i<=n;++i)
{
for(R int i=;i<=m;++i)
{
int x=read();
if(a[i]+x==)s[i]++;
else s[i]=;
a[i]=x;
q.push((emm){i,s[i]});
}
for(R int i=;i<=m;++i)
fa[i]=i,siz[i]=,sf[i]=;
a[]=a[m+]=;
while(!q.empty())
{
int i=q.top().nod,x=q.top().v;q.pop();
sf[i]=;
if(a[i-]+a[i]==&&sf[i-])
con(i-,i);
if(a[i]+a[i+]==&&sf[i+])
con(i,i+);
int fi=fifa(i),mi=min(siz[fi],x);
ansz=max(ansz,mi*mi);
ansc=max(ansc,siz[fi]*x);
}
}
printf("%d\n%d",ansz,ansc);
return ;
}
「ZJOI2007」「LuoguP1169」棋盘制作(并查集的更多相关文章
- 「luogu3402」【模板】可持久化并查集
「luogu3402」[模板]可持久化并查集 传送门 我们可以用一个可持久化数组来存每个节点的父亲. 单点信息更新和查询就用主席树多花 一个 \(\log\) 的代价来搞. 然后考虑如何合并两个点. ...
- 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇
http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回, Arc System Works开发的格斗游戏「GUILTY G ...
- Loj #2731 「JOISC 2016 Day 1」棋盘游戏
Loj 2731 「JOISC 2016 Day 1」棋盘游戏 JOI 君有一个棋盘,棋盘上有 \(N\) 行 \(3\) 列 的格子.JOI 君有若干棋子,并想用它们来玩一个游戏.初始状态棋盘上至少 ...
- 「JOISC 2016 Day 1」棋盘游戏
「JOISC 2016 Day 1」棋盘游戏 先判无解:第1,3行有连续的空格或四个角有空格. 然后可以发现有解的情况第1,3行可以在任意时间摆放. 对于某一列,若第2行放有棋子,那么显然可以把棋盘分 ...
- 众安「尊享e生」果真牛的不可一世么?
近日,具有互联网基因的.亏损大户(成立三年基本没盈利,今年二季度末亏损近4亿,你能指望它多厉害?).财产险公司—众安推出“尊享e生”中高端医疗保险(财险公司经营中高端医疗真的很厉害?真的是中高端医疗险 ...
- XCActionBar 「Xcode 中的 Alfred」
下载地址:https://github.com/pdcgomes/XCActionBar 基本命令: (1)「command+shift+8」或者双击「command」键可以打开「动作输入框窗口」 ( ...
- Git 执行 「fork 出来的仓库」和「最新版本的原仓库」内容同步更新
当我们在 GitHub 上 fork 出一个仓库后,如果原仓库更新了,此时怎样才能保证我们 fork 出来的仓库和原仓库内容一致呢?我们一般关注的是仓库的 master(主干分支)的内容,通过以下步骤 ...
- 翻译「C++ Rvalue References Explained」C++右值引用详解 Part1:概述
本文系对「C++ Rvalue References Explained」 该文的翻译,原文作者:Thomas Becker. 该文较详细的解释了C++11右值引用的作用和出现的意义,也同时被Scot ...
- 「Windows MFC 」「Edit Control」 控件
「Windows MFC 」「Edit Control」 控件
随机推荐
- 3.【nuxt起步】-下面以一个SPA单页程序为例子
spa:single page applcation 1.components目录新建header.vue,footer.vue Header.vue Footer.vue Pages/index.v ...
- Linux进程管理(3):总结
7. exit与_exit的差异 为了理解这两个系统调用的差异,先来讨论文件内存缓存区的问题. 在linux中,标准输入输出(I/O)函数都是作为文件来处理.对应于打开的每个文件,在内存中都有对 ...
- VC++中MCI播放音频文件 【转】
MCI播放mp3音频文件例程 源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Wi ...
- dll的使用
2016-12-11 23:02:24 一:生成DLL 1:创建DLL工程 文件->新建->项目->visual c++->win32->win32控制台应用程序(w ...
- youtube-dl取代you-get?
以前了解到you-get这个项目,支持超多视频网站下载,不过偶尔会出各种问题. 今天看到依云的博客文章:放弃 you-get,转投 youtube-dl 然后特地看了youtube-dl的支持列表:h ...
- Odoo configuration items
[options] addons_path = /opt/odoo/server/openerp/addons,/opt/odoo/server/addons admin_passwd = admin ...
- ActiveX控件打包成Cab置于网页中自动下载安装
[背景] http://www.360doc.com/content/13/1120/20/10159093_330853247.shtml 做过ActiveX控件的朋友都知道,要想把自己做的Acti ...
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...
- python(20)- 列表生成式和生成器表达式练习Ⅱ
题目一: 有两个列表,分别存放来老男孩报名学习linux和python课程的学生名字linux=['钢弹','小壁虎','小虎比','alex','wupeiqi','yuanhao']python= ...
- 关于mysql engine(引擎)的疑问
http://bbs.chinaunix.net/thread-989698-1-1.html