LC秋季赛的败犬总结--未知数解方程模拟

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC秋季赛的败犬总结--未知数解方程模拟相关的知识,希望对你有一定的参考价值。


关于LC秋季竞赛

题目太离谱了!就花了几分钟写了个签到题。。
然后就没有然后了。。。

遗憾的题目:志愿者调配(6分)

题目描述


OJ平台

题目解析

看图设未知数解方程,我们发现设置x后,这个反向推导后,x 的系数只会由有x的进行继承,而且每次进行 *2、+1、-1, 是时候都会将x的系数 *2、+1、-1, 我们把每个志愿者的项用两个参数表示 {X的系数,常数项}

实际上里面的X可以用0来代替,这样就不会产生多余的常数项了,最后整合X前的系数就可以构建一元方程解出来了。

解题代码

class Solution {
public:
    vector<int> volunteerDeployment(vector<int>& finalCnt, long long totalNum, vector<vector<int>>& edges, vector<vector<int>>& plans) {
        vector<vector<int>> paths(finalCnt.size() + 1);
        for (auto && d : edges) {
            paths[d[0]].push_back(d[1]);
            paths[d[1]].push_back(d[0]);
        }

        vector<pair<int, long long>> t(paths.size());
        t[0] = { 1, 0 };
        for (int i = 0; i < finalCnt.size(); i++) {
            t[i + 1] = { 0, finalCnt[i] };
        }

        for (int i = (int)plans.size() - 1; ~i; i--) {
            int num = plans[i][0];
            int idx = plans[i][1];
            auto&[ca, cb] = t[idx];

            if (num == 1) {
                ca *= 2;
                cb *= 2;
            }
            else {
                int f = (num == 2) ? -1 : 1;
                for (auto n : paths[idx]) {
                    auto&[a, b] = t[n];
                    a += ca * f;
                    b += cb * f;
                }
            }
        }

        int sx = 0;
        for (auto&[a, b] : t) {
            sx += a;
            totalNum -= b;
        }
        int x = totalNum / sx;

        vector<int> ans(t.size());
        for (int i = 0; i < t.size(); i++) {
            auto[a, b] = t[i];
            ans[i] = a * x + b;
        }
        return ans;
    }
};

以上是关于LC秋季赛的败犬总结--未知数解方程模拟的主要内容,如果未能解决你的问题,请参考以下文章

高斯消元小结

解方程与高斯消元

如何解2元一次方程

用Python解方程

matlab用solve解方程组,解出来有很多组解,如何编程只保留全部未知数都大于0的一组解(该方

矩阵中有未知数,怎么变为上三角矩阵