当前位置:   article > 正文

zzuli 20级第六次周赛 2731 问题 I: 嘟嘟的渔场_一个整数,代表鱼塘面积增加的值

一个整数,代表鱼塘面积增加的值

题目描述

嘟嘟是个钓鱼爱好者,他想跟好朋友嘻嘻比赛钓鱼,但是没有场地,正好嘟嘟的老家有几块矩形空地。
为了比赛的公平,嘟嘟需要建设两个形状大小均相同的矩形渔场,两个鱼塘可以建在同一块空地上,或者分别建在两块不同的空地上,同时为了能放下更多的鱼,需要渔场的面积尽量大。
已知嘟嘟的老家有n块矩形空地,每个空地的长宽分别为ai和bi (1 ≤ i ≤ n)。
请你帮嘟嘟求出他能建设的渔场的最大面积(单个鱼塘的面积)。 
注意:嘟嘟所建的渔场的边和空地的边是平行的,不需要考虑在矩形中斜着建设。

输入

第一行输入一个整数 n ,代表空地的个数。

第二行输入 n 个整数ai,代表第i块空地的长度。

第三行输入 n 个整数bi,代表第i片空地的宽度。

(1 ≤ n ≤ 105 , 1 ≤ ai , bi ≤ 104)

注意,给出的数据均满足ai ≥ bi (1 ≤ i ≤ n),并且已经按照 ai 升序排序,即 ai ≤ ai+1 (1 ≤ i < n) b不一定有序.

输出

输出单个渔场的最大面积,结果保留1位小数。

样例输入

3
3 4 8
1 4 7

样例输出

28.0

提示

样例解释:
在第三块空地建两块形状相同的鱼塘面积最大,每个鱼塘面积是28.0

思路

由题知,鱼塘可以在一块地上也可以在两块地上;如果在一块地上鱼塘要想最大就必须是单体面积最大的鱼塘除以二,而如果是两块不同的地上时,题目要求面积形状一样,所以找两两之间公共面积最大的值,再和单体面积最大的鱼塘的面积除以二比较,谁大,输出谁;

难点

本题一大难点就是两两之间的公共面积怎么算,如果暴力枚举的话时间会超限,这时看看给的数据的条件,不难想到一个取巧的方法,此方法类似动态规划(我自己觉得),如下;

对于两两间的公共面积来说是两者长,宽较小的那一边的乘积;但题目已经将一边的长度按升序给出,设两个边长为x[a].a和x[a].b,a为元素个数;x[a].a已经排好,那么x[a].a于x[a-1].a,必定以x[a-1].a的长度为公共边,另一个公共边是min(x[a].b,x[a-1].b);两者相乘得出一边为x[a-1].a时的最大公共面积,以此类推找到一边为x[a-2].a时的公共面积最大值等等,再从这一对公共面积中找到最大的那个拿去比较

注:边为x[a-2].a时,另一边为 min ( x[a-2].b , max ( x[a].b , x[a-1].b ) );如果不理解,举个例子,x[a].b=5;  x[a-1].b=1; x[a-2].b=6;  你说是取5能得最大值还是取1能;

代码

C语言

  1. #include<stdio.h>
  2. #include<math.h>
  3. struct message{
  4. double a;
  5. double b;
  6. double c; //c是面积
  7. };
  8. int main()
  9. {
  10. int a,b,c,d,e;
  11. double max=0,l;
  12. scanf("%d",&a);
  13. struct message x[a],y;
  14. for(b=0;b<a;b++)
  15. scanf("%lf",&x[b].a);
  16. for(b=0;b<a;b++)
  17. {
  18. scanf("%lf",&x[b].b);
  19. x[b].c=x[b].b*x[b].a;
  20. }
  21. for(b=0;b<1;b++) //找单个面积最大的,赋值于l
  22. {
  23. d=b;
  24. for(c=b+1;c<a;c++)
  25. if(x[d].c<x[c].c)
  26. d=c;
  27. l=x[d].c;
  28. }
  29. for(b=a-1;b>=1;b--)
  30. {
  31. if(x[b-1].a*fmin(x[b].b,x[b-1].b)>max)
  32. max=x[b-1].a*fmin(x[b].b,x[b-1].b);
  33. x[b-1].b=fmax(x[b].b,x[b-1].b); //状态转移方程?应该是
  34. }
  35. if(l/2>max)
  36. printf("%.1lf",l/2);
  37. else
  38. printf("%.1lf",max);
  39. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/884253
推荐阅读
  

闽ICP备14008679号