求助,为什么Linux跑的和洛谷的测评姬不一样
查看原帖
求助,为什么Linux跑的和洛谷的测评姬不一样
539200
Trump_楼主2023/10/18 15:28
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>

int N;
std::vector<double> a[105];

int Find(int line, int colu) {
    int result = line;
    
    for (int i = line + 1; i <= N; ++ i)
        if (std::fabs(a[result][colu]) < std::fabs(a[i][result]))
            result = i;
        
    return result;  
}

int main() {
    // freopen("1.in", "r", stdin);

    scanf("%d", &N);
    for (int i = 1; i <= N; ++ i)
        a[i].resize(N + 3);
        
//  std::cerr << -1 << std::endl;
        
    for (int i = 1; i <= N; ++ i) 
        for (int j = 1; j <= N + 1; ++ j) 
            scanf("%lf", &a[i][j]);
//          std::cerr << a[i][j] << " ";
//      }
//      std::cout << '\n';
//  }
//  std::cout << -1 << std::endl;
        
        
//  for (int i = 1; i <= N; ++ i) {
//      for (int j = 1; j <= N + 1; ++ j) {
//          std::cout << a[i][j] << " ";
//      }
//      std::cout << std::endl;
//  }
    
    int work = 0;
    for (int colu = 1, line = 1; colu <= N; ++ colu) {
//      std::cout << -1 << std::endl;
        int pivot = Find(line, colu);
//      std::cout << pivot << std::endl;
        
        if (std::fabs(a[pivot][colu]) <= 1e-8)
            continue;
        
        std::swap(a[line], a[pivot]);
        
//      for (int i = 1; i <= N; ++ i) {
//          for (int j = 1; j <= N + 1; ++ j) {
//              std::cout << a[i][j] << " ";
//          }
//          std::cout << '\n';
//      }
        
        for (int j = 1; j <= N; ++ j) {
            if (line == j)
                continue;
            
            double tem = a[j][colu] / a[line][colu];
            for (int k = colu; k <= N + 1; ++ k) 
                a[j][k] -= tem * a[line][k];
            
        }
        line ++;
        work = line;
    }
    
    if (work != N + 1) {
        for (int i = work; i <= N; ++ i) {
            if (std::fabs(a[i][N + 1]) <= 1e-8) {
                printf("-1\n");
                return 0;
            }
        }
        printf("No Solution\n");
        return 0;
    }
    for (int i = 1; i <= N; ++ i) {
//      std::cout << a[i][N + 1] / a[i][i] << '\n';
        printf("%.2lf\n", a[i][N + 1] / a[i][i]);
    }
    
    return 0;
}

第一个点在linux上输出的是 NoSolutionNo Solution,但测评姬的是 −1-1。为啥啊,求教教QAQ

2023/10/18 15:28
加载中...