題目大意:
輸入:
接下來有n行,每行三個整數Li,Ri,Hi。表示第i棟樓的左下角座標爲(Li,0),右上角座標爲(Ri,Hi)。(1<=Li,Ri,Hi<=1000,3<=Ri-Li<=1000)
輸出:
接下來h+1行,爲復原的地圖。
其中h表示最高的那棟樓的高度。
樣例輸入:
1 5 4
7 11 3
9 13 5
樣例輸出:
........####
####....#..#
#..#..###..#
#..#..#....#
#..#..#....#
************
解釋:
分析:
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("*");
}