/**
問題描述:
乙個公司的所有員工正在風景秀麗的海南島旅遊,計畫行程準備從三亞碼頭渡海去
蜈支洲島,但由於最近的颱風「瓊花」摧毀了所有的渡船,遊輪,輪船,帆船等,只
有一種正方形的木筏還在運營中。
這種木筏有n排座位,編號從1到n(n可能是乙個兩位數);每排有n列座位,編號為
(a, b, c, d ..), 這樣每個座位都有唯一的對應號碼,由乙個數字和乙個字母
組成,例如,「9c」 代表第9排第3個座位。但是有一些座位已經預先放上了空桶,
假設空桶沒有分量,但該座位也不能再坐人了。另外還有一些座位已經分配給了
當地的漁民。為了航行安全,木筏渡海時必須保持平衡,所以必須滿足以下條件:
(1) 前一半座位所坐的總人數要等於後一半座位所坐的總人數。
(2) 左一半座位所坐的總人數要等於右一半座位所坐的總人數。
現在,看如何來安排座位,使得木筏一次可以坐更多的公司員工。假設員工的數量
沒有限制,並且每個人無論是員工還是漁民的重量都是相等的。
例如,有4*4的木筏,如下圖所示:
a b c d
1 |. s s s
2 |s . . t
3 |. t . .
4 |. s . .
s是被空桶佔著的座位,t是漁民的座位,.是空餘的座位。
那麼,最多還可以坐六名公司員工,保證前後左右分別都相等。
a b c d
1 |n s s s
2 |s n n t
3 |n t n .
4 |. s n .
n為我們的員工,左總人數=4=右總人數,前總人數=4=後總人數。
這樣,總共最多可以安排6名員工,同時還能保證木筏平衡。
write a function:
class solution
給定木筏的大小n,和兩個字串分別代表桶的位置s和漁民的位置t,返回能
保障平衡的可容納員工的最多人數。如果無論怎樣也不能保障平衡,返回-1.
for instance,
given n=4, s="1b,1c,4b,1d,2a" and t="3b,2d",
your function should return 6.
// you can use includes, for example:
// #include
#include
#include
#include
#include
#include
#include
using namespace std;
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
//// -----------------
// | | |
// | 1,i | 2,j |
// | | |
// -----------------
// | | |
// | 3,m | 4,n |
// | | |
// -----------------
int solution(int n, char* s, char* t)
else /* 當前行號是個一位數 */
// 檢查引數有效性和重複引數
if (x >= n || y >= n)
if (wood_boat[x*n+y] != '.')
// 標記木筏中空桶的位置's'
wood_boat[x*n+y] = 's';
// 判斷當前空桶位於哪個象限,並且分別計數
if (x < h && y < h) ++s1;
else if (x < h && y >= h) ++s2;
else if (x >= h && y < h) ++s3;
else /*(x >= h && y >= h)*/ ++s4;
}// end while
// step-2: 計算每個象限中漁民的數量
i = 0;
while (i < len_t)
else /* 當前行號是個一位數 */
// 檢查引數有效性和重複引數
if (x >= n || y >= n)
if (wood_boat[x*n+y] != '.')
// 標記木筏中漁民的位置't'
wood_boat[x*n+y] = 't';
// 判斷當前漁民位於哪個象限,並且分別計數
if (x < h && y < h) ++t1;
else if (x < h && y >= h) ++t2;
else if (x >= h && y < h) ++t3;
else /*(x >= h && y >= h)*/ ++t4;
}// end while
// step-3: 算出四個象限空位的數量
e1 = q - s1 - t1;
e2 = q - s2 - t2;
e3 = q - s3 - t3;
e4 = q - s4 - t4;
// step-4: 列印木筏的布局
std::cout << "\n ┌----┬----┐";
std::cout << "\n │ q1 │ q2 │";
std::cout << "\n ├----┼----┤";
std::cout << "\n │ q3 │ q4 │";
std::cout << "\n └----┴----┘\n";
std::cout << "\nin this case, \n";
std::cout << "1th quadrant(q1): [s:" << s1 << ", t:" << t1 << ", e:" << e1 << "]\n";
std::cout << "2th quadrant(q2): [s:" << s2 << ", t:" << t2 << ", e:" << e2 << "]\n";
std::cout << "3rd quadrant(q3): [s:" << s3 << ", t:" << t3 << ", e:" << e3 << "]\n";
std::cout << "4th quadrant(q4): [s:" << s4 << ", t:" << t4 << ", e:" << e4 << "]\n";
// 列印木筏矩陣影象
printf("\n ");
for (i = 0; i < n; ++i)
printf("%c ", 'a'+i);
printf("\n");
for (i = 0; i < n; ++i)
printf("]\n");
}printf("\n");
delete wood_boat;
// step-5: 判斷平衡性並計算最大可坐員工的數量
// note: 任何乙個象限都有可能不坐乙個員工就已經平衡了,但未必就沒有解;
// 或者它的所有空位都坐滿員工了才能平衡。所以應從0到ei全部遍歷。
// 在任何乙個象限裡,如果坐不滿就能滿足平衡要求了,那麼人的具體
// 位置並不重要。所以,我們只需要知道每個象限最多能坐多少員工並且
// 還能夠保持平衡即可。
int result = 0;
for (i = 0; i <= e1; ++i)
for (j = 0; j <= e2; ++j)
for (m = 0; m <= e3; ++m)
for (n = 0; n <= e4; ++n)
else
}// end if
}// end for
// step-6: 是否有解?
if (result == 0)
return -1;
else
return result;}
乘坐電梯的問題
題目內容 說明 1 假設最開始電梯在0層,n個人從第0層進電梯,中間不再增添新乘客 2 n個人都到達各自的樓層後,電梯需要回到0層 3 到同一樓層的人不管有幾人,電梯開門的時間總共只需要5秒.輸入格式 輸入資料首先包含乙個整數n 0 n 10 表示電梯內的人數 然後是n個人要到的樓層si 1 si ...
乘坐電梯注意事項
而針對眾多的疑問,記者也聯絡到了當事人周先生,他向記者講述了整件事情發生的經過。9月24號中午1點多,周先生把岳父從老家接到了岑鞏縣城。那天我接爸爸下來過中秋節,一起吃飯,然後爸爸就說要去哪個親戚家看親戚,讓我一起去看一下,正好那裡也是我上班的地方。周先生說。周先生是這個小區物業公司的電工,平時也做...
ybt金牌導航1 1 2 乘坐電梯
有乙個電梯,有 n 個人要進電梯。對於每一秒,排在最前面的人有 p 的機率會進電梯 不會再出來 否則不進,別的人都不進。問你 t 秒後,在電梯上的人的期望數量。這道題我們先設 fi,jf fi,j 為在第 i ii 秒之後有 j jj 個人在電梯上的概率。那首先初始化很顯然,f0,0 1f 1 f0...