P3389 【模板】高斯消元法 - 洛谷
代码
| C++ |
|---|
| const double eps = 1e-8;
int main() {
int n;
cin >> n;
vector a(n + 2, vector(n + 2, 0.0));
for (int i = 1 ; i <= n ; i++) {
for (int j = 1 ; j <= n + 1 ; j++) {
cin >> a[i][j];
}
}
for (int i = 1 ; i <= n ; i++) {
int mx = i;
for (int j = i + 1 ; j <= n ; j++) {
if (fabs(a[j][i]) > fabs(a[mx][i])) {
mx = j;
}
}
if (fabs(a[mx][i]) < eps) {
cout << "No Solution";
return 0;
}
swap(a[i], a[mx]);
double t = a[i][i];
for (int j = i ; j <= n + 1 ; j++) {
a[i][j] /= t;
}
for (int j = i + 1 ; j <= n ; j++) {
t = a[j][i];
for (int k = i ; k <= n + 1 ; k++) {
a[j][k] -= a[i][k] * t;
}
}
}
vector<double> ans(n + 1);
ans[n] = a[n][n + 1];
for (int i = n - 1 ; i >= 1 ; i--) {
ans[i] = a[i][n + 1];
for (int j = i + 1 ; j <= n ; j++) {
ans[i] -= a[i][j] * ans[j];
}
}
for (int i = 1 ; i <= n ; i++) {
cout << fixed << setprecision(2) << ans[i] << "\n";
}
return 0;
}
|
P2447 [SDOI2010] 外星千足虫 - 洛谷
代码
| C++ |
|---|
| bitset<1005> a[2005];
int n, m;
int gauss() {
int mx = 0;
for (int i = 0 ; i < n ; i++) {
int cur = i;
for (int j = i ; j < m ; j++) {
if (a[j][i] == 0) continue;
cur = j;
break;
}
if (a[cur][i] == 0) return 0;
swap(a[i], a[cur]);
mx = max(mx, cur);
for (int j = 0 ; j < m ; j++) {
if (i == j) continue;
if (a[j][i]) {
a[j] ^= a[i];
}
}
}
return mx + 1;
}
int main() {
cin >> n >> m;
for (int i = 0 ; i < m ; i++) {
string s;
cin >> s;
for (int j = 0 ; j < n ; j++) {
a[i][j] = s[j] - '0';
}
int x;
cin >> x;
a[i][n] = x;
}
int ret = gauss();
if (ret) {
cout << ret << "\n";
for (int i = 0 ; i < n ; i++) {
cout << (a[i][n] ? "?y7M#" : "Earth") << "\n";
}
} else {
cout << "Cannot Determine";
}
return 0;
}
|