※ 引述《enmeitiryous (enmeitiryous)》之铭言:
: 模拟周
: 题目:2028 finds missing observation
: 给定一个6面分别为1-6的骰子,给你一个长度为m的vector为被观察到的骰子掷m次的结果
: 给你一个数字n代表我们错过的观察次数(即实际总共掷了m+n次),及全部掷的结果的点数
: 总和平均,求未被观察到的n次的任一可能结果,如果不可能则回传{}
: 思路:
: 如果全部掷点数和-m次观察到总和<n或是>6n则为不可能的情形,除此之外我们可以将
: n长度vector填满总和差/n,再一一把总和差%n 尽量让ans[i]=6的条件下分配下去
思路差不多 先求n个骰子总和 在[n, 6n]范围才合法
接下来把骰子平均点数 多出来的余数另外加就可以了
class Solution {
public:
vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
vector<int> ans(n, 0);
int m = rolls.size(), total = n+m;
int m_rolls = accumulate(rolls.begin(), rolls.end(), 0);
int n_rolls = mean * total - m_rolls;
if(n_rolls < n || n_rolls > n*6 ) return {};
int avg_point = n_rolls / n, reminder = n_rolls % n;
for(int i = 0; i < n; ++i){
ans[i] = avg_point;
if(i < reminder) ans[i]++;
}
return ans;
}
};