leetcode-daily/cpp/2203/220327-CN.cpp

35 lines
1.4 KiB
C++

#include <vector>
#include <numeric>
/**
* 2028. Find Missing Observations
* You have observations of n + m 6-sided dice rolls with each face numbered from 1 to 6. n of the observations went missing, and you only have the observations of m rolls. Fortunately, you have also calculated the average value of the n + m rolls.
* You are given an integer array rolls of length m where rolls[i] is the value of the ith observation. You are also given the two integers mean and n.
* Return an array of length n containing the missing observations such that the average value of the n + m rolls is exactly mean. If there are multiple valid answers, return any of them. If no such array exists, return an empty array.
* The average value of a set of k numbers is the sum of the numbers divided by k.
* Note that mean is an integer, so the sum of the n + m rolls should be divisible by n + m.
*/
class Solution {
public:
static std::vector<int> missingRolls(const std::vector<int>& rolls, int mean, int n) {
int sum = std::accumulate(rolls.begin(), rolls.end(), 0);
int rem = (n + rolls.size()) * mean - sum;
if (rem < n || rem > 6 * n)
return {};
std::vector<int> ret(n, rem / n);
rem = rem - rem / n * n;
for (int i = 0; i < n && rem > 0; ++i) {
int delta = std::min(rem, 6 - ret[i]);
rem -= delta;
ret[i] += delta;
}
return ret;
}
};
int main() {
auto ret = Solution::missingRolls({1, 5, 6}, 3, 4);
return 0;
}