#include <iostream>
#include <chrono>
using namespace std;
double calc1(const int* a, const int* b) {
auto start = chrono::system_clock::now();
int* c = new int[10000000];
for (int i = 0; i < 10000000; i++)
c[i] = a[i] + b[i];
delete[] c;
return chrono::duration<double>( chrono::system_clock::now() -start).count();
}
double calc2(const int*a, const int*b) {
auto start = chrono::system_clock::now();
int* c = new int[10000000];
for (int i = 0; i < 10000000; i+=4){
auto i0 = i;
auto i1 = i+1;
auto i2 = i+2;
auto i3 = i+3;
c[i0] = a[i0] + b[i0];
c[i1] = a[i1] + b[i1];
c[i2] = a[i2] + b[i2];
c[i3] = a[i3] + b[i3];
}
delete[] c;
return chrono::duration<double>(chrono::system_clock::now() - start).count();
}
int main() {
// your code goes here
int* a = new int[10000000];
int* b = new int[10000000];
std::cout << calc1(a, b) << '\n' << calc2(a, b);
delete[] a;
delete[] b;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2hyb25vPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmRvdWJsZSBjYWxjMShjb25zdCBpbnQqIGEsIGNvbnN0IGludCogYikgewoJCglhdXRvIHN0YXJ0ID0gY2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwoJCglpbnQqIGMgPSBuZXcgaW50WzEwMDAwMDAwXTsKCQoJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDAwMDsgaSsrKQoJCWNbaV0gPSBhW2ldICsgYltpXTsKCQkKCWRlbGV0ZVtdIGM7CgoJcmV0dXJuIGNocm9ubzo6ZHVyYXRpb248ZG91YmxlPiggY2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpIC1zdGFydCkuY291bnQoKTsKfQoKZG91YmxlIGNhbGMyKGNvbnN0IGludCphLCBjb25zdCBpbnQqYikgewoJIAoJYXV0byBzdGFydCA9IGNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKCQoJaW50KiBjID0gbmV3IGludFsxMDAwMDAwMF07CgkKCWZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwMDA7IGkrPTQpewoJCQoJCWF1dG8gaTAgPSBpOwoJCWF1dG8gaTEgPSBpKzE7CgkJYXV0byBpMiA9IGkrMjsKCQlhdXRvIGkzID0gaSszOwoJCQoJCWNbaTBdID0gYVtpMF0gKyBiW2kwXTsKCQljW2kxXSA9IGFbaTFdICsgYltpMV07CgkJY1tpMl0gPSBhW2kyXSArIGJbaTJdOwoJCWNbaTNdID0gYVtpM10gKyBiW2kzXTsKCX0KCQoJZGVsZXRlW10gYzsKCQoJcmV0dXJuIGNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgLSBzdGFydCkuY291bnQoKTsKCn0KCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJaW50KiBhID0gbmV3IGludFsxMDAwMDAwMF07CglpbnQqIGIgPSBuZXcgaW50WzEwMDAwMDAwXTsKCQoJc3RkOjpjb3V0IDw8IGNhbGMxKGEsIGIpIDw8ICdcbicgPDwgY2FsYzIoYSwgYik7CgkKCWRlbGV0ZVtdIGE7CglkZWxldGVbXSBiOwp9