Problem Description
Alice 和 Bob 在玩游戏。
桌面上有两堆金币,少的那堆有 x 个金币,多的那堆有 2x 个金币。
假设金币可以被无限细分。Alice 和 Bob 事先都不知道 x是几,但是他们都知道 x是一个 (0, 1]之间均匀分布的随机实数。
Alice 会等概率的被分配到其中的一堆金币,Bob 会得到另一堆。x的值和两堆金币的分配是相互独立的。
拿到金币以后,Alice 会马上数清自己拿到多少金币。然后 Alice 可以选择是否和 Bob 那堆换。
给定 Alice 拿到的金币数目,请问 Alice 要不要交换,使得她期望能得到的金币数目更多?
如果交换期望得到的金币数目多于不交换期望得到的金币数目,输出交换,否则不交换。
Input
第一行一个正整数test (1≤test≤200000) 表示数据组数。
接下来每行一个小数p(0<p≤2),p最多保留五位小数,表示 Alice 拿到的金币数目。
Output
对于每组数据,输出 Yes 表示需要交换,输出 No 表示不要交换。
Sample Input
Sample Output
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| #include <iostream> #include<vector> #include<algorithm> #include <string>
using namespace std;
vector<string> compute() { int groupNum; std::cin >> groupNum; vector<string> output; for (int i = 0; i < groupNum; i++) { float num; std::cin >> num; if (num > 1) { output.push_back("No"); } else { if (2 * num * 0.5 + num / 2 * 0.5 > num) { output.push_back("Yes"); } else { output.push_back("No"); } } } return output; }
int main() { vector<string> res = compute(); for (int i = 0; i < res.size(); i++) { printf("%s\n", res[i].c_str()); } return 0; }
|