題意:給你兩個罐子a和b,你可以進行六種操作,讓你求得最少的步驟使得a或b的罐子容量為c。
解題思路:a和b都在動態變化,我們可以將他們關聯起來,利用結構體陣列記錄當前狀態和步驟數,同樣,我們要利用輔助陣列visited來判斷當前狀態是否被訪問。這裡最難的就是記錄步驟,然後輸出每輪步驟,由於我們要按照原序輸出,故我們可以利用棧來實現步驟輸出。則此題可解。
ac**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn=
105;
int a,b,c;
typedef
struct node1 //a代表罐1,b代表罐2,其中step代表操作步驟數。
node1;
typedef
struct node2
node2;
bool visited[maxn]
[maxn]
;//標誌陣列,避免重複進行步驟,到死迴圈。
void
print
(int n)
intbfs
(int a,
int b,
int c,node2 *p)
else
if(i==1)
else
if(i==2)
else
}else
if(i==3)
else
if(i==4)
else
if(i==5)
else}if
(!visited[temp.a]
[temp.b]
)while
(!s.
empty()
)return0;
}}}}
cout<<
"impossible"
<
return0;
}int
main()
}
踢罐子 計算幾何
題目大意 平面上有n個點,其中任意2點不重合,任意3點不共線。我們等概率地選取乙個點a,再在剩下的n 1個點中等概率地選取乙個點b,再在剩下的n 2個點中等概率地選取乙個點c。然後我們計算傷害倍率d。作abc外接圓,每乙個位於弧bc和線段bc之間的點計1倍,每乙個位於弧bc上的點 包括b,c兩點 計...
雞尾酒買罐子
雞尾酒喜歡罐子,有一天他到了乙個罐子專賣店,他決定買好多好多罐子回家。但是專賣店快關門了,雞尾酒必須盡快選購,他決定按順序把罐子瀏覽一遍,如果他的錢花完了 錢數 0 或者已經走過了最後乙個罐子,就會立即離開商店。由於雞尾酒不會掩飾自己對罐子的喜愛,所以只要他現有的錢大於等於當前看到的罐子的 他就會購...
1246 罐子和硬幣
有n個罐子,有k個硬幣,每個罐子可以容納任意數量的硬幣。罐子是不透明的,你可以把這k個硬幣任意分配到罐子裡。然後罐子被打亂順序,你從外表無法區別罐子。最後罐子被編上號1 n。每次你可以詢問某個罐子,如果該罐子裡有硬幣,則你可以得到1個 但你不知道該罐子中還有多少硬幣 如果該罐子是空的,你得不到任何硬...