#include <stdio.h>
#include <stdlib.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, *beginning = p, *end;
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
, &end
); // Convert to double p++;
}
p = beginning;
}
det_calc(&matrix[0][0], pivot, dim);
for(int i = 0; i < dim; i++) result *= matrix[i][i];
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KCnZvaWQgZGV0X2NhbGMoZG91YmxlICptYXRyaXgsIGludCBwaXZvdFtdLCBpbnQgZGltKXsKICAgIGludCBtLCBuLCBwOwogICAgZG91YmxlICptYXQsICpyb3csICpjb2wsIG1heDsKICAgIG1hdCA9IG1hdHJpeDsKICAgIGZvciAocCA9IDA7IHAgPCBkaW07IG1hdCArPSBkaW0sIHArKyl7IC8vIEdldCB0aGUgcGl2b3QKICAgICAgICBwaXZvdFtwXSA9IHA7CiAgICAgICAgbWF4ID0gZmFicygqKG1hdCArIHApKTsKICAgICAgICByb3cgPSBtYXQgKyBkaW07CiAgICAgICAgZm9yIChuID0gcCArIDE7IG4gPCBkaW07IG4rKywgcm93ICs9IGRpbSl7CiAgICAgICAgICAgIGlmIChtYXggPCBmYWJzKCoocm93ICsgcCkpKXsKICAgICAgICAgICAgICAgIG1heCA9IGZhYnMoKihyb3cgKyBwKSk7CiAgICAgICAgICAgICAgICBwaXZvdFtwXSA9IG47CiAgICAgICAgICAgICAgICBjb2wgPSByb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHBpdm90W3BdICE9IHApIC8vIElmIHBpdm90IGlzIGRpZmYgZnJvbSBjdXJyZW50IHJvdywgc3dhcAogICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgZGltOyBuKyspewogICAgICAgICAgICAgICAgbWF4ID0gKihtYXQgKyBuKTsKICAgICAgICAgICAgICAgICoobWF0ICsgbikgPSAqKGNvbCArIG4pOwogICAgICAgICAgICAgICAgKihjb2wgKyBuKSA9IG1heDsKICAgICAgICAgICAgfQogICAgICAgIGlmICgqKG1hdCArIHApID09IDApIHJldHVybjsgLy8gU2luZ3VsYXIgbWF0cml4CiAgICAgICAgcm93ID0gbWF0ICsgZGltOwogICAgICAgIGZvciAobSA9IHAgKyAxOyBtIDwgZGltOyByb3cgKz0gZGltLCBtKyspIC8vIEdldCBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeAogICAgICAgICAgICAqKHJvdyArIHApIC89ICoobWF0ICsgcCk7CiAgICAgICAgcm93ID0gbWF0ICsgZGltOwogICAgICAgIGZvciAobSA9IHAgKyAxOyBtIDwgZGltOyByb3cgKz0gZGltLCBtKyspIC8vIFVwZGF0ZSBtYXRyaXgKICAgICAgICAgICAgZm9yIChuID0gcCArIDE7IG4gPCBkaW07IG4rKykKICAgICAgICAgICAgICAgICoocm93ICsgbikgLT0gKihyb3cgKyBwKSAqICoobWF0ICsgbik7CiAgICB9Cn0KCmludCBtYWluKHZvaWQpewogICAgaW50IGRpbTsKICAgIGRvdWJsZSByZXN1bHQgPSAxLjA7CiAgICBjaGFyIGxpbmVbMTAwXTsKICAgIGNoYXIgKnAgPSBsaW5lLCAqYmVnaW5uaW5nID0gcCwgKmVuZDsKICAgIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pOyAvLyBHZXQgdGhlIGZpcnN0IG51bWJlcgogICAgc3NjYW5mKGxpbmUsICIlZCIsICZkaW0pOyAvLyBDb252ZXJ0IHRvIGludAogICAgZG91YmxlIG1hdHJpeFtkaW1dW2RpbV07CiAgICBpbnQgcGl2b3RbZGltXTsgLy8gQXJyYXkgdG8gdHJhY2sgcGl2b3QKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltOyBpKyspewogICAgICAgIGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pOyAvLyBHZXQgbmV4dCBsaW5lCiAgICAgICAgd2hpbGUgKCpwKXsgLy8gUmVhZCB1bnRpbCBlbmQgb2YgbGluZQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGRpbTsgaisrKQogICAgICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gc3RydG9kKHAsICZlbmQpOyAvLyBDb252ZXJ0IHRvIGRvdWJsZQogICAgICAgICAgICBwKys7CiAgICAgICAgfQogICAgICAgIHAgPSBiZWdpbm5pbmc7CiAgICB9CiAgICBkZXRfY2FsYygmbWF0cml4WzBdWzBdLCBwaXZvdCwgZGltKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBkaW07IGkrKykgcmVzdWx0ICo9IG1hdHJpeFtpXVtpXTsKICAgIHByaW50ZigiJWYiLCByZXN1bHQpOwogICAgcmV0dXJuIDA7Cn0=
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