85 lines
1.1 KiB
Plaintext
85 lines
1.1 KiB
Plaintext
const int N = 1024;
|
|
|
|
|
|
void trsm(int n, float A[][N], float B[][N]) {
|
|
int i, j, k;
|
|
|
|
k = 0;
|
|
while (k < n) {
|
|
i = 0;
|
|
while (i < n) {
|
|
B[i][k] = B[i][k] / A[i][i];
|
|
j = i + 1;
|
|
while (j < n) {
|
|
B[j][k] = B[j][k] - A[j][i] * B[i][k];
|
|
j = j + 1;
|
|
}
|
|
i = i + 1;
|
|
}
|
|
k = k + 1;
|
|
}
|
|
}
|
|
|
|
float A[N][N];
|
|
float B[N][N];
|
|
float C[N][N];
|
|
|
|
int main() {
|
|
int n = getint();
|
|
int i, j, k;
|
|
|
|
i = 0;
|
|
j = 0;
|
|
while (i < n) {
|
|
j = 0;
|
|
while (j < n) {
|
|
A[i][j] = getfloat();
|
|
j = j + 1;
|
|
}
|
|
i = i + 1;
|
|
}
|
|
i = 0;
|
|
j = 0;
|
|
while (i < n) {
|
|
j = 0;
|
|
while (j < n) {
|
|
C[i][j] = getfloat();
|
|
j = j + 1;
|
|
}
|
|
i = i + 1;
|
|
}
|
|
|
|
starttime();
|
|
k = 0;
|
|
while (k < 5) {
|
|
i = 0;
|
|
while (i < n) {
|
|
j = 0;
|
|
while (j < n) {
|
|
B[i][j] = C[i][j];
|
|
j = j + 1;
|
|
}
|
|
i = i + 1;
|
|
}
|
|
trsm(n, A, B);
|
|
k = k + 1;
|
|
}
|
|
stoptime();
|
|
|
|
float ans = 0;
|
|
i = 0;
|
|
while (i < n) {
|
|
j = 0;
|
|
while (j < n) {
|
|
ans = ans + B[i][j];
|
|
j = j + 1;
|
|
}
|
|
i = i + 1;
|
|
}
|
|
|
|
putfloat(ans);
|
|
putch(10);
|
|
|
|
return 0;
|
|
}
|