COCI2014silueta
2015-09-09 21:43
411 查看
题目大意:
有一个画家,画了n栋摩天大楼。(实际上只有远远望去的轮廓)。每栋楼都是一个矩形,有些矩形是重叠在一起的。所有的矩形的底边都在一条直线上。很不幸,画被烧毁了。但是记得每个矩形的位置和高度,现在请你复原这幅画,并求出矩形的轮廓线的周长(不包含底边)。输入:
第一行:给出一个整数n表示有n栋大楼。(n<10000)接下来有n行,每行三个整数Li,Ri,Hi。表示第i栋楼的左下角坐标为(Li,0),右上角坐标为(Ri,Hi)。(1<=Li,Ri,Hi<=1000,3<=Ri-Li<=1000)
输出:
第一行为一个整数,表示摩天大楼的周长。接下来h+1行,为复原的地图。
其中h表示最高的那栋楼的高度。
样例输入:
31 5 4
7 11 3
9 13 5
样例输出:
28........####
####....#..#
#..#..###..#
#..#..#....#
#..#..#....#
************
解释:
![](http://192.168.28.99/upload/201509/COCI-building.png)
分析:
保存每一个横坐标最大的高度,乱搞输出。code:
#include<cstdio> #define MAXN 10000 #define MAXL 1000 using namespace std; inline int max(int a,int b){return a>b?a:b;} inline int min(int a,int b){return a<b?a:b;} int n,ans,R,H,lim; int hei[MAXL+1]; char map[MAXL+5][MAXL+5]; int main() { int i,j,l,r,h; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d%d%d",&l,&r,&h); R=max(R,r); H=max(H,h); for(j=l;j<r;j++) hei[j]=max(hei[j],h); } for(i=1;i<R;i++) for(j=1;j<=H;j++) map[i][j]='.'; for(i=1;i<R;i++) { if(hei[i]>0) { map[i][hei[i]]='#',++ans; if(hei[i-1]==0||hei[i+1]==0) ++ans; } if(hei[i]>=hei[i-1]||hei[i]>=hei[i+1]) { for(j=hei[i]-1;j>=min(max(hei[i-1],1),max(hei[i+1],1));j--) map[i][j]='#',++ans; } } printf("%d\n",ans); while(!hei[lim]) ++lim; for(j=H;j>=1;j--) { for(i=lim;i<R;i++) printf("%c",map[i][j]); printf("\n"); } for(i=lim;i<R;i++) printf("*"); }
相关文章推荐
- java parseInt和valueof的区别
- hdu 5014__Number Sequence
- ACE_Message_Queue
- UIPageControl
- UILabel
- UVA 11324 The Largest Clique (拆点+KM)
- iOS—实现UI imageview的底层
- Expression Tree Build
- 09-09 Service(续)、UI主线程、AsyncTask(UI主线程)
- Android Service——在子线程中更新UI
- iOS小结(五) 结合 Instrument 分析并解决memory issues
- interview questions
- ios-UIKit 练习
- UINavigationController和UIBarButtonItem
- UIView
- Qt5 中使用了QQuickWidget,程序退出时容易崩溃的解决办法。
- button初始化类目
- Java- 字符串(String,StringBuffer,StringBuilder类)
- iOSInterviewQuestions/iOS面试问题
- UIImagePickerController