解题思路:刚读完这道题后,不懂什么意思,感觉挺奇怪的。看了几遍题后,还是无从下手。通过动笔画画与测试数据结果对住了,觉得应该是这个意思,也确实是的。题目意思的正确理解应当是,从任意位置开始一直取到末尾,然后求其平均值,把这n个平均值中取最大的一个输出。也是按照贪心原则求解问题。
如Sample:
10
2 10 4 6 5 10 10 2 3 2
取
<1> (2 + 10 + 4 + 6 + 5 + 10 + 10 + 2 + 3 + 2 ) / 10
<2>(10 + 4 + 6 + 5 + 10 + 10 + 2 + 3 + 2) / 9
<3>( 4 + 6 + 5 + 10 + 10 + 2 + 3 + 2) / 8
<4>( 6 + 5 + 10 + 10 + 2 + 3 + 2) / 7
<5>(5 + 10 + 10 + 2 + 3 + 2) / 6
<6>(10 + 10 + 2 + 3 + 2) / 5
<7>(10 + 2 + 3 + 2) / 4
<8>(2 + 3 + 2) / 3
<9>( 3 + 2) / 2
<10>2 / 1
在这10个数里取一个最大值输出即可。
注意:这题竟然没有给数据量大小,确实挺难为人的。开始我设了1005的上限,检查无误提交竟然是Segmentation Fault,让我看了半天不知道是什么错误,以前从没见过。我猜是不是数据量设的太小了,就改为10005的上限,结果终于AC了。不过最关键的还是题意要搞懂!
2 #include<cstdio>
3 using namespace std;
4
5 #define Max 10005
6 double a[Max],b[Max];
7
8 int main()
9 {
10 int i,n;
11 while(cin>>n)
12 {
13 for(i= 0;i<n;i++)
14 cin>>a[i];
15 double sum= 0.0;
16 for(i=n- 1;i>= 0;i--)
17 {
18 sum+=a[i];
19 b[i]=sum/(n-i);
20 }
21 double max= 0;
22 for(i= 0;i<n;i++)
23 if(max<b[i]) max=b[i];
24 printf( " %.6f\n ",max);
25 }
26 return 0;
27 }