LC秋季赛的败犬总结--未知数解方程模拟
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC秋季赛的败犬总结--未知数解方程模拟相关的知识,希望对你有一定的参考价值。
关于LC秋季竞赛
题目太离谱了!就花了几分钟写了个签到题。。
然后就没有然后了。。。
遗憾的题目:志愿者调配(6分)
题目描述
题目解析
看图设未知数解方程,我们发现设置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秋季赛的败犬总结--未知数解方程模拟的主要内容,如果未能解决你的问题,请参考以下文章