#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
#define N 100
void mult1(int **a, int **b, int **c)
{
for (unsigned q=0; q<N; ++q)
for (unsigned w=0; w<N; ++w)
c[q][w] = 0;
for (unsigned q=0; q<N; ++q)
for (unsigned w=0; w<N; ++w)
for (unsigned e=0; e<N; ++e)
c[q][w] += a[q][e] * b[e][w];
}
void mult2(int **a, int **b, int **c)
{
for (unsigned q=0; q<N; ++q)
for (unsigned w=0; w<N; ++w)
c[q][w] = 0;
for (unsigned q=0; q<N; ++q)
for (unsigned w=0; w<N; ++w)
for (unsigned e=0; e<N; ++e)
c[q][w] += a[q][e] * b[w][e];
}
void mult3(int **a, int **b, int **c)
{
for (unsigned q=0; q<N; ++q)
for (unsigned w=0; w<N; ++w)
c[q][w] = 0;
for (unsigned q=0; q<N; ++q)
{
int *aa = a[q];
for (unsigned w=0; w<N; ++w)
{
int *bb = b[q];
for (unsigned e=0; e<N; ++e)
c[q][w] += aa[e] * bb[e];
}
}
}
int main()
{
int **a = new int*[N];
int **b = new int*[N];
int **c = new int*[N];
for (unsigned q=0; q<N; ++q)
{
a[q] = new int[N];
b[q] = new int[N];
c[q] = new int[N];
for (unsigned w=0; w<N; ++w)
{
a[q][w] = rand();
b[q][w] = rand();
}
}
long m1=0, m2=0, m3=0;
for (unsigned q=0; q<10; ++q)
{
long t = clock();
mult1(a, b, c);
m1 += t = clock() - t;
cout << "1: " << t << endl;
t = clock();
mult2(a, b, c);
m2 += t = clock() - t;
cout << "2: " << t << endl;
t = clock();
mult3(a, b, c);
m3 += t = clock() - t;
cout << "3: " << t << endl;
}
cout << endl << "Results: " << m1 << ", " << m2 << ", " << m3 << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxjc3RkbGliPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgTiAxMDAKCnZvaWQgbXVsdDEoaW50ICoqYSwgaW50ICoqYiwgaW50ICoqYykKewoJZm9yICh1bnNpZ25lZCBxPTA7IHE8TjsgKytxKQoJCWZvciAodW5zaWduZWQgdz0wOyB3PE47ICsrdykKCQkJY1txXVt3XSA9IDA7CgkJCQoJZm9yICh1bnNpZ25lZCBxPTA7IHE8TjsgKytxKQoJCWZvciAodW5zaWduZWQgdz0wOyB3PE47ICsrdykKCQkJZm9yICh1bnNpZ25lZCBlPTA7IGU8TjsgKytlKQoJCQkJY1txXVt3XSArPSBhW3FdW2VdICogYltlXVt3XTsKfQoKdm9pZCBtdWx0MihpbnQgKiphLCBpbnQgKipiLCBpbnQgKipjKQp7Cglmb3IgKHVuc2lnbmVkIHE9MDsgcTxOOyArK3EpCgkJZm9yICh1bnNpZ25lZCB3PTA7IHc8TjsgKyt3KQoJCQljW3FdW3ddID0gMDsKCQkJCglmb3IgKHVuc2lnbmVkIHE9MDsgcTxOOyArK3EpCgkJZm9yICh1bnNpZ25lZCB3PTA7IHc8TjsgKyt3KQoJCQlmb3IgKHVuc2lnbmVkIGU9MDsgZTxOOyArK2UpCgkJCQljW3FdW3ddICs9IGFbcV1bZV0gKiBiW3ddW2VdOwp9Cgp2b2lkIG11bHQzKGludCAqKmEsIGludCAqKmIsIGludCAqKmMpCnsKCWZvciAodW5zaWduZWQgcT0wOyBxPE47ICsrcSkKCQlmb3IgKHVuc2lnbmVkIHc9MDsgdzxOOyArK3cpCgkJCWNbcV1bd10gPSAwOwoJCQkKCWZvciAodW5zaWduZWQgcT0wOyBxPE47ICsrcSkKCXsKCQlpbnQgKmFhID0gYVtxXTsKCQlmb3IgKHVuc2lnbmVkIHc9MDsgdzxOOyArK3cpCgkJewoJCQlpbnQgKmJiID0gYltxXTsKCQkJZm9yICh1bnNpZ25lZCBlPTA7IGU8TjsgKytlKQoJCQkJY1txXVt3XSArPSBhYVtlXSAqIGJiW2VdOwoJCX0KCX0KfQoKaW50IG1haW4oKQp7CglpbnQgKiphID0gbmV3IGludCpbTl07CglpbnQgKipiID0gbmV3IGludCpbTl07CglpbnQgKipjID0gbmV3IGludCpbTl07CgkKCWZvciAodW5zaWduZWQgcT0wOyBxPE47ICsrcSkKCXsKCQlhW3FdID0gbmV3IGludFtOXTsKCQliW3FdID0gbmV3IGludFtOXTsKCQljW3FdID0gbmV3IGludFtOXTsKCQkKCQlmb3IgKHVuc2lnbmVkIHc9MDsgdzxOOyArK3cpCgkJewoJCQlhW3FdW3ddID0gcmFuZCgpOwoJCQliW3FdW3ddID0gcmFuZCgpOwoJCX0KCX0KCQoJbG9uZyBtMT0wLCBtMj0wLCBtMz0wOwoJCglmb3IgKHVuc2lnbmVkIHE9MDsgcTwxMDsgKytxKQoJewoJCWxvbmcgdCA9IGNsb2NrKCk7CgkJbXVsdDEoYSwgYiwgYyk7CgkJbTEgKz0gdCA9IGNsb2NrKCkgLSB0OwoJCWNvdXQgPDwgIjE6ICIgPDwgdCA8PCBlbmRsOwoJCQoJCXQgPSBjbG9jaygpOwoJCW11bHQyKGEsIGIsIGMpOwoJCW0yICs9IHQgPSBjbG9jaygpIC0gdDsKCQljb3V0IDw8ICIyOiAiIDw8IHQgPDwgZW5kbDsKCQkKCQl0ID0gY2xvY2soKTsKCQltdWx0MyhhLCBiLCBjKTsKCQltMyArPSB0ID0gY2xvY2soKSAtIHQ7CgkJY291dCA8PCAiMzogIiA8PCB0IDw8IGVuZGw7Cgl9CgkKCWNvdXQgPDwgZW5kbCA8PCAiUmVzdWx0czogIiA8PCBtMSA8PCAiLCAiIDw8IG0yIDw8ICIsICIgPDwgbTMgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0=