add: 220327-CN [cpp]

This commit is contained in:
Lam Haoyin 2022-03-27 10:41:46 +08:00
parent 3dd4bd7e69
commit 24bc4f2979
No known key found for this signature in database
GPG Key ID: 8C089CB1A2B7544F
2 changed files with 40 additions and 1 deletions

39
cpp/2203/220327-CN.cpp Normal file
View File

@ -0,0 +1,39 @@
#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 : ret) {
if (rem <= 0)
break;
if (rem < 6 - i) {
i += rem;
break;
}
rem -= 6 - i;
i = 6;
}
return ret;
}
};
int main() {
auto ret = Solution::missingRolls({1, 5, 6}, 3, 4);
return 0;
}

View File

@ -3,4 +3,4 @@ PROJECT(2203)
SET(CMAKE_CXX_STANDARD 23)
ADD_EXECUTABLE(2203 220327.cpp)
ADD_EXECUTABLE(2203 220327-CN.cpp)