疑问

P2455 [SDOI2006] 线性方程组

hsaht2426 @ 2024-06-26 18:56:43

#include<bits/stdc++.h>
using namespace std;

int main(){
    freopen("P2455.in","w",stdout);
    int n=23,m=2;
    cout<<n<<'\n';
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++,cout<<' '){
            if(j==i) cout<<1<<' ';
            else if(j==i-1) cout<<-m<<' ';
            else cout<<0<<' ';
        }
        cout<<(i==1)<<'\n';
    }
    /*x_i=m^{i-1}?*/
    return 0;
}

上面的生成器似乎可以对指定 m 生成一组满足 x_i=m^{i-1} 的数据,那取 n=50,m=100 是不是会爆 \text{double}。还是我理解错了什么。


by Opuntia9622 @ 2024-06-26 19:24:19

@World_Ender 1. 不会溢出。2. 题面说了相对误差不超过 0.01 即可。


by hsaht2426 @ 2024-06-26 19:31:05

@Opuntia9622 我的意思是说,答案可以很大,x_{50}=100^{49} 这种,常规写法输出是否会存在一些问题?


by hsaht2426 @ 2024-06-26 19:31:42

@World_Ender 或者在运算过程中掉精度?


by Opuntia9622 @ 2024-06-26 19:36:03

@World_Ender 不太懂,我拿这个 generator 跑题解 n=50,m=100 的数据,全输出的 -1?


by donghanwen1225 @ 2024-06-26 19:44:51

@World_Ender 我觉得你说的是有道理的。

但是这种题的意图并不是想把值域卡满,所以数据也肯定没有这么极限。根本上还是因为题目没有保证解的范围。


by Opuntia9622 @ 2024-06-26 20:05:48

好像是的,正常高斯消元小数部分的精度会被判成 0。

解决方法貌似也有,消的时候把较小的系数乘大一点就可以了?


|