//#include "stdafx.h"
#include <vector>
#include <chrono>
#include <iostream>
using namespace std;
using namespace std::chrono;
using number = double;
const int n = 100000;
vector<number> x(n);
inline number Harry()
{
number sum = 0;
number part = 0;
for (int i = n - 1; i > 0; --i)
{
sum += x[i - 1] * (part += x[i]);
}
return sum;
}
inline number VladD()
{
number s = 0;
for (int i = 0; i < n; ++i) s += x[i];
number s2 = 0;
for (int i = 0; i < n; ++i) s2 += x[i] * x[i];
return (s * s - s2) / 2;
}
int main(int argc, const char * argv[])
{
for (int i = 0; i < x.size(); ++i)
x[i] = (number)rand();
{
number sum = 0;
auto begin = steady_clock::now();
for (int i = 0; i < 10000; ++i) sum += VladD();
auto end = steady_clock::now();
cout << "sum = " << sum << ", elapsed time = " << duration_cast<milliseconds>(end - begin).count() << endl;
}
{
number sum = 0;
auto begin = steady_clock::now();
for (int i = 0; i < 10000; ++i) sum += Harry();
auto end = steady_clock::now();
cout << "sum = " << sum << ", elapsed time = " << duration_cast<milliseconds>(end - begin).count() << endl;
}
}
Ly8jaW5jbHVkZSAic3RkYWZ4LmgiCiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxjaHJvbm8+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ubzsKCnVzaW5nIG51bWJlciA9IGRvdWJsZTsKY29uc3QgaW50IG4gPSAxMDAwMDA7Cgp2ZWN0b3I8bnVtYmVyPiB4KG4pOwoKaW5saW5lIG51bWJlciBIYXJyeSgpCnsKICAgIG51bWJlciBzdW0gPSAwOwogICAgbnVtYmVyIHBhcnQgPSAwOwoKICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+IDA7IC0taSkKICAgIHsKICAgICAgICBzdW0gKz0geFtpIC0gMV0gKiAocGFydCArPSB4W2ldKTsKICAgIH0KICAgIHJldHVybiBzdW07Cn0KCmlubGluZSBudW1iZXIgVmxhZEQoKQp7CiAgICBudW1iZXIgcyA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgcyArPSB4W2ldOwogICAgbnVtYmVyIHMyID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSBzMiArPSB4W2ldICogeFtpXTsKICAgIHJldHVybiAocyAqIHMgLSBzMikgLyAyOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4LnNpemUoKTsgKytpKQogICAgICAgIHhbaV0gPSAobnVtYmVyKXJhbmQoKTsKCiAgICB7CiAgICAgICAgbnVtYmVyIHN1bSA9IDA7CiAgICAgICAgYXV0byBiZWdpbiA9IHN0ZWFkeV9jbG9jazo6bm93KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSBzdW0gKz0gVmxhZEQoKTsKICAgICAgICBhdXRvIGVuZCA9IHN0ZWFkeV9jbG9jazo6bm93KCk7CiAgICAgICAgY291dCA8PCAic3VtID0gIiA8PCBzdW0gPDwgIiwgZWxhcHNlZCB0aW1lID0gIiA8PCBkdXJhdGlvbl9jYXN0PG1pbGxpc2Vjb25kcz4oZW5kIC0gYmVnaW4pLmNvdW50KCkgPDwgZW5kbDsKICAgIH0KCiAgICB7CiAgICAgICAgbnVtYmVyIHN1bSA9IDA7CiAgICAgICAgYXV0byBiZWdpbiA9IHN0ZWFkeV9jbG9jazo6bm93KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSBzdW0gKz0gSGFycnkoKTsKICAgICAgICBhdXRvIGVuZCA9IHN0ZWFkeV9jbG9jazo6bm93KCk7CiAgICAgICAgY291dCA8PCAic3VtID0gIiA8PCBzdW0gPDwgIiwgZWxhcHNlZCB0aW1lID0gIiA8PCBkdXJhdGlvbl9jYXN0PG1pbGxpc2Vjb25kcz4oZW5kIC0gYmVnaW4pLmNvdW50KCkgPDwgZW5kbDsKICAgIH0KfQ==