这题有毒吧
查看原帖
这题有毒吧
43513
岸芷汀兰楼主2021/3/22 15:57

求助各位同学。请问以下两种写法有什么区别?

第一种写法:

for (int i = 1; i <= n; ++ i) {
        for (int j = i + 1; j <= n; ++ j) {
            while (a[j][i]) {
                int r = a[i][i] / a[j][i];
                for (int k = i; k <= n; ++ k) {
                    a[i][k] = (a[i][k] - 1LL * r * a[j][k] % mod + mod) % mod;
                }
                res = -res;
                swap(a[i], a[j]);
            }
            // swap(a[i], a[j]); res = -res;
        }
    }

第二种写法:

for (int i = 1; i <= n; ++ i) {
        for (int j = i + 1; j <= n; ++ j) {
            while (a[i][i]) {
                int r = a[j][i] / a[i][i];
                for (int k = i; k <= n; ++ k) {
                    a[j][k] = (a[j][k] - 1LL * r * a[i][k] % mod + mod) % mod;
                }
                res = -res;
                swap(a[i], a[j]);
            }
            swap(a[i], a[j]); res = -res;
        }
    }

第一种写法超时,只有46分。第二种写法AC。

我感觉是复杂度的问题,但具体也不知道到底有什么区别。

2021/3/22 15:57
加载中...