题目大意:
华佗去病人家看病时会把所有药装在瓶子里串成一条链,但他不知道哪个瓶子里装哪种药,他只记得链上瓶子的顺序,所以他这样解决:当他需要带两种药\(A\)和\(B\)时,他会把瓶子串成\(-B-A-B\)这样中间为\(A\)药,两边为\(B\)药。
问华佗带\(n\)种药最少需要多少瓶子。
题目比较简单,理解装药的顺序就好。
个人认为,可能理解错的情况为:
\(-B-A-B-D-C-D-……\)
实际上,很显然这样是错的,因为他不知道哪个瓶子放哪种药。
所以应该这样放:
\(-D-C-B-A-B-C-D-……\)
这样放中间的药就确定了,又因为他记得顺序,所以哪个瓶子装哪种药也就确定了。
那么中间的药放一个瓶子,剩下要都要放两个瓶子,所以
\(ans = (n - 1) *2+1 = n*2-1\)
代码:
#include <iostream>
using namespace std;
int main()
{
int T, n;
cin >> T;
for (int i = 1; i <= T; i++) {
cin >> n;
cout << "Case #" << i <<":" << ' ' << n * 2 - 1 << '\n';
}
}
完结撒花∩( ・ω・)∩