USACO OPEN12銅組 解開積木塊

2021-07-16 03:52:12 字數 1258 閱讀 2745

題目大意:

乙個平面有三個積木塊攪成了一坨,問能不能通過平移把他們分開。

初二六個人討論出來的題解:

用深搜移動積木,判斷是否分開。

列舉:只需列舉兩個積木的移動,第三個積木的移動相當於另外兩個積木同時向同乙個方向移動。

判重:儲存正在列舉的兩個積木中,第乙個方塊的座標,用bool陣列判重。

判斷已經分開:當兩塊積木,乙個積木最右邊的方塊在另乙個積木最左邊的方塊的左邊時(很繞口),這兩個積木就是分開的。當三個積木處於兩兩分開的狀態時,就成功了(輸出1)

#include

#include

#include

using namespace std

;#define zero 11

#define maxn 22

#define right(a,b) (a+zero>=0&&b+zero>=0&&a+zero<=maxn&&b+zero<=maxn)

const int dd[4][2]=,,,};

int n1,n2,n3,l1,r1,u1,d1,l2,r2,u2,d2,l3,r3,u3,d3;

struct xy //座標結構體

b1[85],b2[85],b3[85];//三個積木塊

bool vis[maxn+1][maxn+1][maxn+1][maxn+1];//判重

bool map[maxn+1][maxn+1];

void input()

for(int i=1

;i<=n2;i++)

for(int i=1

;i<=n3;i++)

//l,r,u,d儲存的每個積木最左邊和最右邊和最上面和最下面的座標

}bool mark(xy a,xy b)

//用於判重並標記

bool check(xy a,xy b,xy c)

//判斷列舉的積木有沒有重疊

bool finish(xy a,xy b,xy c)

//判斷是否全部分開

int dfs(xy b,xy c)

}//移動第乙個積木

for(int i=0

;i<4;i++)

}//移動第二個積木

xy t1,t2;

for(int i=0

;i<4;i++)

}//同時移動兩個積木==移動第三個積木

return 0;}

int main()

12 組合模式

1.說明 請參見本文第一章 2.組合模式說明 組合模式 將物件組合成樹形介面以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件具有一致性。為了保持整體和區域性的一致性,整體和區域性具有相同的介面,從而避免判斷該節點是整體還是區域性。介面可以實現為空。使用範圍 在需求中體現部分與整...

第12組選題報告

組長部落格 存在一些競爭對手 這裡這裡 隊員比例 張凌昕2 孫承愷10 邱暢傑10 林星培12 餘琳玲15 林青霞12 王永福20 徐祖豪9 丁樞桐10 組號分數154 254348 452543.8 649.2757 848956.4 1052.2 1155.8 1248 平均分51.76 a 我...

第12組 每週小結 1 3 (組長)

展示github當日 文件簽入記錄 解決了哪些bug,又是如何解決的 需要寫詳細 1 解決了發布物品但是對方看不了的bug,原因是小程式中原來上傳是用chooseimage函式,上傳的是被暫時儲存在了本地,所以對方檢視不了。後來使用了雲端上傳的方法,把上傳到雲儲存裡面,最終實現了對方也能看到上傳的,...