博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
COCI CONTEST #3 29.11.2014 SILUETA
阅读量:6228 次
发布时间:2019-06-21

本文共 2225 字,大约阅读时间需要 7 分钟。

大意:有一个画家,画了n栋摩天大楼。(实际上只有远远望去的轮廓)。每栋楼都是一个矩形,有些矩形是重叠在一起的。所有的矩形的底边都在一条直线上。很不幸,画被烧毁了。但是记得每个矩形的位置和高度,现在请你复原这幅画,并求出矩形的轮廓线的周长(不包含底边)。

思路:在覆盖了图片之后,用一遍BFS解决问题(我之前写的时候本以为是要把整个矩形全部覆盖,后来发现不需要,但是之前写的树状数组懒得改了……)

代码:

#include
#include
#define MAXN 1006int c[MAXN][MAXN], h[MAXN][MAXN], n, M, N, l, r, NN = 0x3f3f3f3f;bool vis[MAXN][MAXN];struct P{ int a, b; P(){} P(int q, int w){a = q; b = w;}}q[MAXN*MAXN];void Upd(int a[], int x, int v){ for(; x <= 1000; x += (x&(-x))) a[x] += v;}int Q(int a[], int x){ int ans = 0; for(; x > 0; x -= (x&(-x))) ans += a[x]; return ans;}char mp[MAXN][MAXN], ans[MAXN][MAXN];int num;int main(){ int t1, t2, t3; scanf("%d\n", &n); for(int i = 1; i <= n; i ++) { scanf("%d%d%d", &t1, &t2, &t3); if(M < t2-1) M = t2-1; if(N < t3) N = t3; if(NN > t1) NN = t1; Upd(h[t3], t1, 1); Upd(h[t3], t2, -1); Upd(c[t1], 1, 1); Upd(c[t1], t3+1, -1); Upd(c[t2-1], 1, 1); Upd(c[t2-1], t3+1, -1); } for(int i = 1; i <= N; i ++) for(int j = 1; j <= M; j ++) if(Q(c[j], i) || Q(h[i], j)) mp[i][j] = '#'; q[++r] = P(N + 1, 1); vis[N+1][1] = 1; while(l < r) { P t = q[++l]; if(mp[t.a][t.b-1] == '#') ans[t.a][t.b-1] = '#', num++; else if(t.a>0&&t.b-1>=0 && !vis[t.a][t.b-1]) {q[++r] = P(t.a, t.b-1);vis[t.a][t.b-1] = 1;} if(mp[t.a-1][t.b] == '#') ans[t.a-1][t.b] = '#', num++; else if(t.a>1&&t.b>=0 && !vis[t.a-1][t.b]) {q[++r] = P(t.a-1, t.b);vis[t.a-1][t.b] = 1;} if(mp[t.a][t.b+1] == '#') ans[t.a][t.b+1] = '#', num++; else if(t.a>0&&t.b>=0&&t.b<=M && !vis[t.a][t.b+1]) {q[++r] = P(t.a, t.b+1);vis[t.a][t.b+1] = 1;} if(mp[t.a-1][t.b+1] == '#') ans[t.a-1][t.b+1] = '#'; if(mp[t.a-1][t.b-1] == '#') ans[t.a-1][t.b-1] = '#'; } printf("%d\n", num); for(int i = N; i > 0; i --) { for(int j = NN; j <= M; j ++) if(ans[i][j] == '#') putchar('#'); else putchar('.'); putchar('\n'); } for(int i = NN; i <= M; i ++) putchar('*'); putchar('\n'); return 0;}

转载于:https://www.cnblogs.com/geng4512/p/5296912.html

你可能感兴趣的文章
opengl overlay plane
查看>>
静态库和动态库
查看>>
近来有不少博友向本人提向,鉴于本站的邮件系统不是很好用,建议大家加入本人的QQ群...
查看>>
[转] SQL Server 批量 停用/启用 外键约束
查看>>
Bug管理工具
查看>>
Django performance
查看>>
touch — 设定文件的访问和修改时间
查看>>
Spark集群模式&Spark程序提交
查看>>
package-info.java(转载)
查看>>
Hash
查看>>
QuickFlow之动态子流程
查看>>
通常每个套接字地址 (协议/网络地址/端口) 只允许使用一次
查看>>
javascript使回车键替代tab键的光标移动功能
查看>>
对XML的收集2
查看>>
C#3.0学习笔记(10)泛型
查看>>
C语言头文件的使用
查看>>
MVC中,查询以异步呈现,分页不用异步的解决方案
查看>>
QTP中实现对文本文件(txt)的读写操作
查看>>
wp_terms分类信息表—WordPress数据库研究(2.6.2版本)#8
查看>>
asp.net验证控件简单说明
查看>>