题目大意:

华佗去病人家看病时会把所有药装在瓶子里串成一条链,但他不知道哪个瓶子里装哪种药,他只记得链上瓶子的顺序,所以他这样解决:当他需要带两种药\(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';
    }
} 

完结撒花∩( ・ω・)∩

01-02 02:27