解题思路:
看到位数是50位,稍微虚了一下,不过看之前的大佬解释,double足以承受这个规模的打击。不需要高精度。
又查了一下低精度类型数据的范围:
以下范围均在DEV中测试
int的范围是:-2147483648---2147483647 (10位)
long和int没有区别
long long的范围是:-9223372036854775808---9223372036854775807 (19位)
double的范围是:-1.79769e+308---1.79769e+308
long double的范围是:-1.18973e+4932---1.18973e+4932
好了,规模的问题考虑清楚了,下面就是推公式了:
原谅我偷懒不想MathType...
直接把x的值,即题目要求的初始的机器人的个数求出来,然后惨无人道地输出就行了
注意事项:
1.数据规模要注意,但是double足够。
2.能推公式就推公式
参考代码:
#include <iostream> #include <cmath> using namespace std; int main(void) { double x,n,S; cin >> n >> S; x = (S - n + 2*pow(2, n) - 2)/(2*pow(2, n) - 1); cout << x << endl; return 0; }
0.0分
2 人评分