JZOJ 3807. 【NOIP2014模拟8.25】地砖铺设
来源:互联网 发布:软件使用合同印花税 编辑:程序博客网 时间:2024/05/15 04:12
题目大意
给你一个矩阵,在矩阵里面画正方形,且相邻正方形颜色不同,且答案为字典序最小的合法方案。
输入
2 4
输出
AABA
AACB
数据范围 N,M<=100。
题解
这道题我们用贪心来解决。
首先我们搜到(i,j)这个格子,如果能够尽量用较小字母就用较小字母,否则看看能不能够扩展。
看看什么情况不能够涂上颜色k(对于格子(i,j))。
假设左边的那个格子颜色也是k,如果左边那个格子不是它所在正方形的右上角,那么不行。
如果上面的颜色是k或者右边的颜色是k,那么也不行。
如果能扩展的话,那么这个新正方形的下边界不能超过n,否则不能扩展。
另外,我们在正方形的右上角标一个数字,表示这个正方形的大小。
如果左边那个格子不是它所在正方形的右上角,那么这个格子的数字一定为0。
下面来看看n=2,m=4的具体做法:
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#define N 103#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;int n,m,i,j,k,l,cnt;int a[N][N],f[N][N];int main(){ scanf("%d%d",&n,&m); fo(i,1,n) fo(j,1,m) if (!a[i][j]) { fo(k,1,26) { if (k==a[i][j-1]) { if (i+f[i][j-1]>n) continue; if (f[i][j-1]==0) continue; } if (a[i-1][j]==k || a[i][j+1]==k) continue; break; } if (k==a[i][j-1]) { a[i][j]=k; f[i][j]=f[i][j-1]+1; fo(l,1,f[i][j]-1) a[i+l][j]=k; fo(l,1,f[i][j]-1) a[i+f[i][j]-1][j-l]=k; } else { a[i][j]=k; f[i][j]=1; } } fo(i,1,n) { fo(j,1,m) printf("%c",a[i][j]+64); printf("\n"); }}
2 0
- JZOJ 3807. 【NOIP2014模拟8.25】地砖铺设
- JZOJ 3807. 【NOIP2014模拟8.25】地砖铺设
- JZOJ 3807 【NOIP2014模拟8.25】地砖铺设
- 【NOIP2014模拟8.25】地砖铺设
- 【JZOJ 3807】地砖铺设
- 【JZOJ3807】地砖铺设
- JZOJ 3808. 【NOIP2014模拟8.25】道路值守
- JZOJ 3809. 【NOIP2014模拟8.25】设备塔
- JZOJ 3809. 【NOIP2014模拟8.25】设备塔
- JZOJ 3808 【NOIP2014模拟8.25】道路值守
- JZOJ 3809 【NOIP2014模拟8.25】设备塔
- JZOJ NOIP2014模拟 8.12
- JZOJ NOIP2014模拟 8.13
- jzoj NOIP2014提高组模拟8.9总结
- [JZOJ 3794]. 【NOIP2014模拟8.20】高级打字机
- 【JZOJ】 【NOIP2014】【模拟试题】保镖排队
- JZOJ 3814. 【NOIP2014模拟9.7】天黑黑
- JZOJ 3823. 【NOIP2014模拟9.9】遇见
- Android Butterknife黄油刀的配置
- 第46篇白板修复之移动按钮拿掉及橡皮擦可选颜色
- fastreport.net 配置及winform数据源绑定
- 基于MFC的windows窗体编程
- centos 7 kernel编译
- JZOJ 3807. 【NOIP2014模拟8.25】地砖铺设
- float
- 委托 事件 实现观察者模式
- android studio Session 'app': Error Installing APK解决方案
- 简单智能远程控制服务器
- 前端的知识库
- jquery select2插件id为空导致服务端搜索不到内容问题的解决
- Android开发从入门到放弃(10)适配GridView
- 关于WEBGL,随便聊聊