日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

luogu P1058 立体图

發(fā)布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 luogu P1058 立体图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

做了這個題后明確了自己的定位。。。

恩。。。普及-

?

?

題目大意估計都知道。。

給個傳送門: ? luogu

?

做了半上午 + 一整個下午的題。。。
占了我今天到的絕大多數(shù)時間。
其實此題不難, 核心代碼我很快就寫了出來
但是我做的方法非常神奇
出了一個非常隱秘的問題,導致我浪費了很多時間在查錯上面


思路:
核心代碼就是構建一個立方體
我的立方體是從右上角開始構建的
由分析可知:只要從一開始的地方挨個放置,就可以覆蓋后面的
所以不必考慮重疊或誰在前誰在后的問題
我是枚舉的每個立方體圖形的右下角
然后在構建的過程中記錄上下左右四個方位所延展的最大位置即可

但是我的做法有個最不同的地方是:
我是隨便找了個地方作為起始點的,因為靠近邊界的話會數(shù)組越界。。
所以直接近似于隨機一個點。。

?

?

#include <iostream> #include <cstdio> #define Max 5009 #define INF 1e7 using namespace std; char map[Max][Max]; int number[Max / 60][Max / 60]; inline int max (int a, int b) {return a > b ? a : b; } inline int min (int a, int b) {return a < b ? a : b; } inline void read (int &now) {now = 0;char word = getchar ();while (word < '0' || word > '9')word = getchar ();while (word >= '0' && word <= '9'){now = now * 10 + (int)(word - '0');word = getchar ();} } void Put (int x, int y) //以下為構建一個立方體 {map[x][y] = map[x][y - 4] = '+';for (int i = 1; i <= 3; i++)map[x][y - i] = '-';map[++x][--y] = map[x][y - 4] = '/';map[x][y + 1] = '|';for (int i = 1; i <= 3; i++)map[x][y - i] = ' ';map[++x][--y] = map[x][y - 4] = '+';map[x][y + 2] = '|';for (int i = 1; i <= 3; i++)map[x][y - i] = '-';map[x][y + 1] = ' ';map[++x][y] = map[x][y - 4] = '|';map[x][y + 2] = '+';for (int i = 1; i <= 3; i++)map[x][y - i] = ' ';map[x][y + 1] = ' ';map[++x][y] = map[x][y - 4] = '|';map[x][y + 1] = '/';for (int i = 1; i <= 3; i++)map[x][y - i] = ' ';map[++x][y] = map[x][y - 4] = '+';for (int i = 1; i <= 3; i++)map[x][y - i] = '-'; } int main (int argc, char *argv[]) {int N;int M;read (N);read (M);int k;int X = N * 30;int Y = M * 30;int x = X, y = Y + 4;int up = INF, L = INF;int down = -INF, R = -INF;for (int i = 1; i <= N; i++){for (int j = 1; j <= M; j++){read (k);x = X;y = Y + j * 4;down = max (down, x); // 注意!!! 記錄下界要放在操作的上面,我的時間都浪費在了這上面 while (k--){Put (x - 4, y + 6);x -= 3; // 每個格子的立方體由下不斷往上放 }R = max (R, y); // 記錄其他邊界 up = min (up, x);L = min (L, y);}X += 2;Y -= 2;}for (int i = up - 1; i <= down + 1; i++){for (int j = L; j <= R + 6; j++)if (map[i][j] == '|' || map[i][j] == '/' || map[i][j] == '+' || map[i][j] == '-' || map[i][j] == ' ')printf ("%c", map[i][j]);else printf (".");printf ("\n");}return 0; }

?

轉載于:https://www.cnblogs.com/ZlycerQan/p/6361518.html

總結

以上是生活随笔為你收集整理的luogu P1058 立体图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。