#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
vector<double> v {1.2, 6.0, 66.3, 9.1, 5.5, -0.5, 2.2, 7.8, 2.2};
auto first_negative = begin(v);
while (*first_negative > 0.0 && first_negative != end(v))
++first_negative;
double geometric_mean =
pow(accumulate(begin(v), first_negative, 1.0, multiplies<double>()),
1.0 / static_cast<double>( distance( begin(v), first_negative ) ));
cout << geometric_mean;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkKewogICAgdmVjdG9yPGRvdWJsZT4gdiB7MS4yLCA2LjAsIDY2LjMsIDkuMSwgNS41LCAtMC41LCAyLjIsIDcuOCwgMi4yfTsKICAgIGF1dG8gZmlyc3RfbmVnYXRpdmUgPSBiZWdpbih2KTsKCXdoaWxlICgqZmlyc3RfbmVnYXRpdmUgPiAwLjAgJiYgZmlyc3RfbmVnYXRpdmUgIT0gZW5kKHYpKQoJCSsrZmlyc3RfbmVnYXRpdmU7Cglkb3VibGUgZ2VvbWV0cmljX21lYW4gPQoJCXBvdyhhY2N1bXVsYXRlKGJlZ2luKHYpLCBmaXJzdF9uZWdhdGl2ZSwgMS4wLCBtdWx0aXBsaWVzPGRvdWJsZT4oKSksCgkJCTEuMCAvIHN0YXRpY19jYXN0PGRvdWJsZT4oIGRpc3RhbmNlKCBiZWdpbih2KSwgZmlyc3RfbmVnYXRpdmUgKSApKTsKCWNvdXQgPDwgZ2VvbWV0cmljX21lYW47CiAgICByZXR1cm4gMDsKfQ==