有错误或不准确的二叉搜索
Binary search with bug or inaccuracy
首先,对不起我的英语。
我正在解决这个问题:
汤姆想用大炮向杰瑞射击,但他希望拥有尽可能多的碎片,但它们必须具有相同的尺寸和尽可能大的大小。他只有n个炮弹可供使用,所以他可以把它们切成小块。他想有 k + 1 件从大炮向杰里射击。他知道每个炮弹的半径。一件的最大体积是多少?输出是四舍五入的 printf("%.3f",answer)。第一个数是n,第二个是k,接下来的n个数是炮弹的半径。 可能的输入: 3 50 1 2 3 输出: 2.900*
这是我的解决方案:每个部件的体积只能小于或等于最小炮弹的体积,因为您无法将炮弹的零件连接在一起。所以我使用了从 0.0 到最小体积的二叉搜索,作为谓词,我使用了函数 numberOfPieces,它计算每个炮弹的碎片数量,特定体积为一块(这是二进制搜索中的中位数)。此函数返回如果我使用中位数作为一件的体积,我可以得到的件数。然后我只是将其与k + 1进行比较,如果它更大或相等,我使用中位数作为低,否则我使用它为高。我的解决方案适用于此测试输入。
问题是我得到WA(错误答案)并且无法检查测试输入值。你能看看我的代码并检查我是否做错了什么吗?问题可能是数字不准确,但我的 EPS 很小,所以应该很好。提前感谢每一个想法。
这是我的代码:
#include <vector>
#include <iostream>
#include <algorithm>
#include <stdio.h>
#define PI 3.14159265358979323846
#define VC ((4.0/3.0) * PI) // constant for volume calculation
#define EPS 1E-12
using namespace std;
// return the number of pieces depending on the volume
int numberOfPieces(int v[], int n, double volume)
{
int ans = 0;
for(int i = 0; i < n; i++)
ans += (int)(v[i] * VC / volume);
return ans;
}
double binarySearch(double a, double b, int k, int n, int v[])
{
double low = a, high = b;
while(abs(low-high) > EPS)
{
double mid = low + (high - low) / 2.0;
if(numberOfPieces(v, n, mid) >= k)
low = mid;
else
high = mid;
}
return (low + high)/2.0;
}
int main()
{
int n, k, x; // n - number of cannonballs, k - number of wanted pieces, x - variable for input
int v[10001]; // radiuses ^ 3 of the cannonballs
scanf("%d%d", &n, &k);
int minVolume = 9999999;
for(int i = 0; i < n; i++) {
scanf("%d",&x);
minVolume = min(minVolume, x);
v[i] = x * x * x;
}
printf("%.3fn", binarySearch(0.0, minVolume * minVolume * minVolume * VC, k + 1, n, v));
return 0;
}
问题是我在二进制搜索中将最小音量设置为高,但我应该使用最大音量。第二个问题是我没有将最大半径 ^ 3 传递给二叉搜索函数。感谢您的帮助
相关文章:
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 二叉搜索不收敛为双倍
- GDB 断点在 Mac 上是不准确的
- cout 打印不准确的结果,printf 打印准确的结果
- C++中的 Json:将数字解析为字符串以避免浮点不准确
- 为什么OpenCV Templete匹配函数根本不准确
- 控制台分辨率程序不准确
- 来自 cmath 库的 asin() 函数返回不准确的值
- 在C++中实现二叉搜索树,搜索不起作用.尝试打印节点的元素会导致输出崩溃
- 二进制搜索不变以查找元素的首次出现
- TBB Parallel_用于计数,增量变量不准确
- 为什么此基准代码用于线性和二进制搜索不起作用
- LIBCURL:网络上传下载速度的输出不准确
- GPROF分析工具是不准确的执行时间
- 使用FP:快速导致错误的VC 结果(不仅仅是不准确)结果 - 这是编译器错误
- GPU驱动程序中的Vulkan纹理映射不准确
- CPP重新排序示例,而计时器不准确
- 浮点数的不准确导致计算错误
- QT错误:搜索不存在的函数
- 有错误或不准确的二叉搜索