Re: [闲聊] 每日leetcode

楼主: enmeitiryous (enmeitiryous)   2024-09-05 08:44:17
模拟周
题目:2028 finds missing observation
给定一个6面分别为1-6的骰子,给你一个长度为m的vector为被观察到的骰子掷m次的结果
给你一个数字n代表我们错过的观察次数(即实际总共掷了m+n次),及全部掷的结果的点数
总和平均,求未被观察到的n次的任一可能结果,如果不可能则回传{}
思路:
如果全部掷点数和-m次观察到总和<n或是>6n则为不可能的情形,除此之外我们可以将
n长度vector填满总和差/n,再一一把总和差%n 尽量让ans[i]=6的条件下分配下去
vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
int pre_ans=accumulate(rolls.begin(),rolls.end(),0);
int tol=rolls.size()+n;
int lim=tol*mean;
if((lim-pre_ans)>6*n || (lim-pre_ans)<n ){
return {};
}
else{
int cring=(lim-pre_ans)/n;
vector<int> ans(n,cring);
int cur=(lim-pre_ans)-(cring*n);
int cc=0;
while(cur!=0){
if(cur>=(6-cring)){
ans[cc]=6;
cur-=(6-cring);
cc++;
}
else{
ans[cc]+=cur;
cur=0;
}
}
return ans;
}
}

Links booklink

Contact Us: admin [ a t ] ucptt.com