最佳裁判(暴力细节处理)

你会发现这题实在不简单,话说本题主人公一年啥也不干就是恋爱+失恋呵呵(还有看跳水哦) 。
第二题嘛,还是要意思意思的。发现题目并不难,然后直接开打。
题目大意:给你n个实数 p i p_{i} pi。除去最大最小值,求平均值,最后找出最接近的那个数的编号。(就没了……,这不就暴力嘛)
其中,5 <= N <= 20,0 <= Pi <= 10。

确实是暴力,估计很多小朋友要以为我水博客了。
但是,这道题在比赛的结果也是很令人吃惊。全场只有两个人AC了,那这道题到底有什么魔力呢 》》to be continued

找到原题目后,你会说我少了一个重要条件那就是:输入包含多组测试数据。
由于成绩不是比赛时可以看到的,很多小伙伴就直接裂开来。看题还是很重要的。
你会捕捉到另一个关键词:实数
所有 p i p_{i} pi的和是实数吧,那算平均数的时候除以的(n-2)是整型啊。
这样一除,就有大问题。会有误差的啊,发现还好没发现就GG了。
这里给出两种处理方法,
1.乘一个很大的数,这样b避免误差。
2.比较的时候直接相减比较是不是>0,但这里要减去一个很小的数,比如:0.0000001。

还有一个好似可有可无的细节,有的小伙伴用了绝对值比较。
很多人还是用了abs(),可是实数要用fabs()啊……but,他们还过了……

#include<cstdio>
#include<cmath>
using namespace std;
long long n,minn;
double max,min,ans,p[105];
int main()
{
	freopen("judgers.in","r",stdin);
	freopen("judgers.out","w",stdout);
	while(1)
	{
		ans=0,max=0,min=1000000;
		scanf("%lld",&n);
		if(n==0) break;
		for(long long i=1;i<=n;++i)
		{
			scanf("%lf",&p[i]);
			ans+=p[i];
			if(p[i]>max) max=p[i];
			if(p[i]<min) min=p[i];
		}
		ans=(ans-max-min)/(n-2);
		min=1000000,minn=0;
		for(long long i=1;i<=n;++i)
			if(fabs(ans-p[i])+0.000001<min)
			{
				min=fabs(ans-p[i]);
				minn=i;
			}
		printf("%d\n",minn);
	}
} 

看似简单的题,不一定简单。注意细节,才能做好题目。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值