noip2008普及组4题题解-rLq
本題地址:?http://www.luogu.org/problem/show?pid=1058
題目描述
小淵是個(gè)聰明的孩子,他經(jīng)常會(huì)給周圍的小朋友們將寫自己認(rèn)為有趣的內(nèi)容。最近,他準(zhǔn)備給小朋友們講解立體圖,請(qǐng)你幫他畫出立體圖。
小淵有一塊面積為m*n的矩形區(qū)域,上面有m*n個(gè)邊長(zhǎng)為1的格子,每個(gè)格子上堆了一些同樣大小的積木(積木的長(zhǎng)寬高都是1),小淵想請(qǐng)你打印出這些格子的立體圖。我們定義每個(gè)積木為如下格式,并且不會(huì)做任何翻轉(zhuǎn)旋轉(zhuǎn),只會(huì)嚴(yán)格以這一種形式擺放:
每個(gè)頂點(diǎn)用1個(gè)加號(hào)’+’表示,長(zhǎng)用3個(gè)”-”表示,寬用1個(gè)”/”,高用兩個(gè)”|”表示。字符’+’,”-”,”/”,”|”的ASCII碼分別為43,45,47,124。字符’.’(ASCII碼46)需要作為背景輸出,即立體圖里的空白部分需要用’.’來(lái)代替。立體圖的畫法如下面的規(guī)則:
若兩塊積木左右相鄰,圖示為:
若兩塊積木上下相鄰,圖示為:
若兩塊積木前后相鄰,圖示為:
立體圖中,定義位于第(m,1)的格子(即第m行第1列的格子)上面自底向上的第一塊積木(即最下面的一塊積木)的左下角頂點(diǎn)為整張圖最左下角的點(diǎn)。
輸入輸出格式
輸入格式:
輸入文件drawing.in第一行有用空格隔開的2個(gè)整數(shù)m和n,表示有m*n個(gè)格子(1<=m,n<=50)。
接下來(lái)的m行,是一個(gè)m*n的矩陣,每行有n個(gè)用空格隔開的整數(shù),其中第i行第j列上的整數(shù)表示第i行第j列的個(gè)子上摞有多少個(gè)積木(1<=每個(gè)格子上的積木數(shù)<=100)。
輸出格式:
輸出文件drawing.out中包含題目要求的立體圖,是一個(gè)K行L列的字符串矩陣,其中K和L表示最少需要K行L列才能按規(guī)定輸出立體圖。
輸入輸出樣例
輸入樣例#1:
3 4 2 2 1 2 2 2 1 1 3 2 1 2輸出樣例#1:
......+---+---+...+---+ ..+---+ / /|../ /| ./ /|-+---+ |.+---+ | +---+ |/ /| +-| | + | | +---+ |/+---+ |/| | |/ /| +/ /|-+ | +---+---+ |/+---+ |/| + | | | +-| | + |/. | | |/ | |-| +.. +---+---+---+---+ |/... | | | | | +.... | | | | |/..... +---+---+---+---+......說(shuō)明
NOIP2008普及組第四題
--------------------------------------------您的好友分割線菌已下線---------------------------------------------------------------
看完這道題不要懵逼,仔細(xì)一瞧“啊呀這么簡(jiǎn)單原來(lái)模擬就好了”
首先是要畫出來(lái)的,畫出來(lái)問題在于會(huì)有重疊,怎么辦呢?原來(lái)先畫優(yōu)先級(jí)最低的方塊的就好了
大概就是先畫在后面的,在下面的,在左面的
↑上面說(shuō)的容易,你給我隨隨便便就寫一個(gè)出來(lái)啊!!!!!!!
所以說(shuō)把一個(gè)方塊看成一個(gè)大矩形
"..+---+",
"./ ? ? ?/|",
"+---+ |",
"| ? ? | +",
"| ? ? |/.",
"+---+.."
這樣就可以劃到矩陣?yán)锪?/p>
接下來(lái)要解決畫到哪里的問題,然而xy坐標(biāo)相當(dāng)不好算(自己算!)
沒什么問題了(才怪啊)
貼代碼
#include<stdio.h> #include<stdlib.h> #include<string.h> const char *pic[6]={"..+---+","./ /|","+---+ |","| | +","| |/.","+---+.."}; char out[404][303]; char pri[304]; int hi[51][51]; int write(int x,int y){for(int i=0;i<6;i++){for(int j=0;j<7;j++){if(pic[i][j]!='.') out[x+i][y+j]=pic[i][j];}}return 0; } int main(){memset(out,'.',sizeof(out));int m,n,h=0;//行、列、高scanf("%d %d",&m,&n);int i,j;int r;for(i=1;i<=m;i++){for(j=1;j<=n;j++){scanf("%d",&r);hi[i][j]=r;if(r>h) h=r;//輸入偷個(gè)懶,記錄下最高的高度} //這樣就把它當(dāng)成m*n*h的大空間 } //畫圖時(shí)選擇性畫出,輸出時(shí)去重即可int x,y,p;for(i=1;i<=m;i++){for(j=1;j<=n;j++){p=1;while(hi[i][j]>=p){x=(2*(i-1)+1)+3*(h-p);y=(4*(j-1)+1)+(m-i)*2;write(x,y);p++;}}}int con=0;char fo[304];for(i=1;i<=2*m+1+3*h;i++){con=0;for(j=1;j<=4*n+2*m+1;j++){fo[j-1]=out[i][j];if(out[i][j]!='.') con=1;//去重判斷 }fo[j-1]='\0';if(con) puts(fo);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/SBSOI/p/5575007.html
總結(jié)
以上是生活随笔為你收集整理的noip2008普及组4题题解-rLq的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 九 AIDL
- 下一篇: 6_2 铁轨(UVa514)栈