#include <iostream>
using namespace std;
void sort(int a[], int b[], int n);
int a[10000000];
int b[10000000];
int main()
{
//赋值a、b并得到得到开始的损耗量
int n;
cin >> n;
double d0 = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i];
d0 += a[i];
}
for (int i = 0; i < n; i++)
{
cin >> b[i];
}
//根据要先拆除的优先度排序
sort(a, b, n);
//计算
double res = d0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < b[i]; j++)
{
d0 = d0 - a[i] * 1.0 / b[i] * 1.0;
res += d0;
}
}
cout << res << endl;
}
void sort(int a[], int b[], int n)
{
//bubble
int temp1, temp2;
for (int i = 1; i < n; i++)
{
for (int j = 0; j < n - i; j++)
{
if (a[j] / b[j] < a[j + 1] / b[j + 1])
{
temp1 = a[j];
a[j] = a[j + 1];
a[j + 1] = temp1;
temp2 = b[j];
b[j] = b[j + 1];
b[j + 1] = temp2;
}
}
}
}
裂开了,和题解思路是一样的,不过在计算总损耗量时方法,我多了一层循环来遍历b[i],能通过一个测试点,题目的那个样例也能过,但是第二个测试点就偏差许多,调试了也没发现问题在哪,请问到底错在哪呢?
没去详细看,但是粗略的看发现了你这个语句
if (a[j] / b[j] < a[j + 1] / b[j + 1])
会造成精度损失,也就是说他们都转为int型,如3/4 == 4/5,但实际应该是3/4 < 4/5
a,b数组开int的话,比较不如换个写法,如: a[j] \times b[j + 1]< a[j + 1] \times b[j] 而且排序的话,不如直接调用标准函数库algorithm中的sort函数更好