比较改进疗法与基准疗法有效率之差是否严格超过 5%。
OJ: noi_openjudge
题目 ID: ch0105-18
难度:入门
标签:模拟浮点数python
日期: 2026-07-30 23:01
题意
第一组是基准疗法,比较每个新疗法的有效率差,严格大于 5% 为 better,严格小于 -5% 为 worse。
思路
不要直接比较浮点有效率,5% 边界会受二进制误差影响。将差值通分:effective * base_total - base_effective * total,再交叉相乘比较它是否严格超过分母的 5%。等于 5% 时仍为 same。
代码
Python代码
python
experiment_count = int(input())
base_total, base_effective = map(int, input().split())
for _ in range(experiment_count - 1):
total, effective = map(int, input().split())
difference_numerator = effective * base_total - base_effective * total
denominator = total * base_total
if difference_numerator * 100 > denominator * 5:
print("better")
elif difference_numerator * 100 < -denominator * 5:
print("worse")
else:
print("same")C++代码
cpp
#include <cstdio>
int main(){
int n;
int a,b;
scanf("%d",&n);
scanf("%d%d",&a,&b);
double rate_1 = b*1.0/a;
int i;
for (i=1;i<n;i++){
scanf("%d %d",&a,&b);
double rate_2 = b*1.0 / a;
if( rate_1 - rate_2 > 0.05)
printf("worse\n");
else if ( rate_2 - rate_1 > 0.05)
printf("better\n");
else
printf("same\n");
}
return 0;
}复杂度
时间复杂度为
总结
比较比例变化时应直接比较差值,并严格区分“大于阈值”和“等于阈值”。