#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void det_calc(double *matrix, int pivot[], int dim){
int m, n, p;
double *mat, *row, *col, max;
mat = matrix;
for (p = 0; p < dim; mat += dim, p++){ // Get the pivot
pivot[p] = p;
row = mat + dim;
for (n = p + 1; n < dim; n++, row += dim){
if (max
< fabs(*(row
+ p
))){ pivot[p] = n;
col = row;
}
}
if (pivot[p] != p) // If pivot is diff from current row, swap
for (n = 0; n < dim; n++){
max = *(mat + n);
*(mat + n) = *(col + n);
*(col + n) = max;
}
if (*(mat + p) == 0) return; // Singular matrix
row = mat + dim;
for (m = p + 1; m < dim; row += dim, m++) // Get lower triangular matrix
*(row + p) /= *(mat + p);
row = mat + dim;
for (m = p + 1; m < dim; row += dim, m++) // Update matrix
for (n = p + 1; n < dim; n++)
*(row + n) -= *(row + p) * *(mat + n);
}
}
int main(void){
int dim;
double result = 1.0;
char line[100];
char *p = line;
fgets(line
, sizeof(line
), stdin
); // Get the first number sscanf(line
, "%d", &dim
); // Convert to int double matrix[dim][dim];
int pivot[dim]; // Array to track pivot
for (int i = 0; i < dim; i++){
fgets(line
, sizeof(line
), stdin
); // Get next line while (*p){ // Read until end of line
for (int j = 0; j < dim; j++)
matrix
[i
][j
] = strtod(p
, &p
); // Convert to double p++;
}
p = line;
}
for (int i = 0; i < dim; i++){
for (int j = 0; j < dim; j++){
printf("%.1f ", matrix
[i
][j
]); }
det_calc(&matrix[0][0], pivot, dim);
for(int i = 0; i < dim; i++) result *= matrix[i][i];
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWF0aC5oPgoKdm9pZCBkZXRfY2FsYyhkb3VibGUgKm1hdHJpeCwgaW50IHBpdm90W10sIGludCBkaW0pewogICAgaW50IG0sIG4sIHA7CiAgICBkb3VibGUgKm1hdCwgKnJvdywgKmNvbCwgbWF4OwogICAgbWF0ID0gbWF0cml4OwogICAgZm9yIChwID0gMDsgcCA8IGRpbTsgbWF0ICs9IGRpbSwgcCsrKXsgLy8gR2V0IHRoZSBwaXZvdAogICAgICAgIHBpdm90W3BdID0gcDsKICAgICAgICBtYXggPSBmYWJzKCoobWF0ICsgcCkpOwogICAgICAgIHJvdyA9IG1hdCArIGRpbTsKICAgICAgICBmb3IgKG4gPSBwICsgMTsgbiA8IGRpbTsgbisrLCByb3cgKz0gZGltKXsKICAgICAgICAgICAgaWYgKG1heCA8IGZhYnMoKihyb3cgKyBwKSkpewogICAgICAgICAgICAgICAgbWF4ID0gZmFicygqKHJvdyArIHApKTsKICAgICAgICAgICAgICAgIHBpdm90W3BdID0gbjsKICAgICAgICAgICAgICAgIGNvbCA9IHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocGl2b3RbcF0gIT0gcCkgLy8gSWYgcGl2b3QgaXMgZGlmZiBmcm9tIGN1cnJlbnQgcm93LCBzd2FwCiAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBkaW07IG4rKyl7CiAgICAgICAgICAgICAgICBtYXggPSAqKG1hdCArIG4pOwogICAgICAgICAgICAgICAgKihtYXQgKyBuKSA9ICooY29sICsgbik7CiAgICAgICAgICAgICAgICAqKGNvbCArIG4pID0gbWF4OwogICAgICAgICAgICB9CiAgICAgICAgaWYgKCoobWF0ICsgcCkgPT0gMCkgcmV0dXJuOyAvLyBTaW5ndWxhciBtYXRyaXgKICAgICAgICByb3cgPSBtYXQgKyBkaW07CiAgICAgICAgZm9yIChtID0gcCArIDE7IG0gPCBkaW07IHJvdyArPSBkaW0sIG0rKykgLy8gR2V0IGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4CiAgICAgICAgICAgICoocm93ICsgcCkgLz0gKihtYXQgKyBwKTsKICAgICAgICByb3cgPSBtYXQgKyBkaW07CiAgICAgICAgZm9yIChtID0gcCArIDE7IG0gPCBkaW07IHJvdyArPSBkaW0sIG0rKykgLy8gVXBkYXRlIG1hdHJpeAogICAgICAgICAgICBmb3IgKG4gPSBwICsgMTsgbiA8IGRpbTsgbisrKQogICAgICAgICAgICAgICAgKihyb3cgKyBuKSAtPSAqKHJvdyArIHApICogKihtYXQgKyBuKTsKICAgIH0KfQoKaW50IG1haW4odm9pZCl7CiAgICBpbnQgZGltOwogICAgZG91YmxlIHJlc3VsdCA9IDEuMDsKICAgIGNoYXIgbGluZVsxMDBdOwogICAgY2hhciAqcCA9IGxpbmU7CiAgICBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKTsgLy8gR2V0IHRoZSBmaXJzdCBudW1iZXIKICAgIHNzY2FuZihsaW5lLCAiJWQiLCAmZGltKTsgLy8gQ29udmVydCB0byBpbnQKICAgIGRvdWJsZSBtYXRyaXhbZGltXVtkaW1dOwogICAgaW50IHBpdm90W2RpbV07IC8vIEFycmF5IHRvIHRyYWNrIHBpdm90CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpbTsgaSsrKXsKICAgICAgICBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKTsgLy8gR2V0IG5leHQgbGluZQogICAgICAgIHdoaWxlICgqcCl7IC8vIFJlYWQgdW50aWwgZW5kIG9mIGxpbmUKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkaW07IGorKykKICAgICAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IHN0cnRvZChwLCAmcCk7IC8vIENvbnZlcnQgdG8gZG91YmxlCiAgICAgICAgICAgIHArKzsKICAgICAgICB9CiAgICAgICAgcCA9IGxpbmU7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpbTsgaSsrKXsKICAgIAlmb3IgKGludCBqID0gMDsgaiA8IGRpbTsgaisrKXsKICAgIAkJcHJpbnRmKCIlLjFmICIsIG1hdHJpeFtpXVtqXSk7CiAgICAJfSBwcmludGYoIlxuIik7CiAgICB9CiAgICBkZXRfY2FsYygmbWF0cml4WzBdWzBdLCBwaXZvdCwgZGltKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBkaW07IGkrKykgcmVzdWx0ICo9IG1hdHJpeFtpXVtpXTsKICAgIHByaW50ZigiJWYiLCByZXN1bHQpOwogICAgcmV0dXJuIDA7Cn0=
OQowIDAgMCAwIDAgMCAyIDMgMQowIDAgMCA3IDMgMiAzIDMgMQowIDAgMCAwIDkgMTAgMiA4IDMKMCAwIDAgMCAwIDAgMCA2IDQKMCA0IDcgMTAgNSAxMCA1IDkgNgowIDAgMCAwIDAgMyA5IDkgNgoyIDEgMiAxIDcgNiAzIDEwIDkKMCAwIDUgNyA3IDMgMTAgMiA1CjAgMCAwIDAgMCAwIDAgMCA1
9
0 0 0 0 0 0 2 3 1
0 0 0 7 3 2 3 3 1
0 0 0 0 9 10 2 8 3
0 0 0 0 0 0 0 6 4
0 4 7 10 5 10 5 9 6
0 0 0 0 0 3 9 9 6
2 1 2 1 7 6 3 10 9
0 0 5 7 7 3 10 2 5
0 0 0 0 0 0 0 0 5