classSolution{public:intfillCups(vector<int>& amount){int times =0;
priority_queue<int> pq;
pq.push(amount[0]);
pq.push(amount[1]);
pq.push(amount[2]);while(pq.top()!=0){int first = pq.top()-1;
pq.pop();int second =max(pq.top()-1,0);
pq.pop();
pq.push(first);
pq.push(second);
times++;}return times;}};
6113. 无限集中的最小数字(134)
代码实现(自解)
classSmallestInfiniteSet{public:
set<int> s;
priority_queue<int, vector<int>, greater<int>> pq;SmallestInfiniteSet(){for(int i =1; i <=1000; i++){
s.emplace(i);
pq.push(i);}}intpopSmallest(){int ans = pq.top();
pq.pop();
s.erase(ans);return ans;}voidaddBack(int num){if(s.count(num))return;
s.emplace(num);
pq.push(num);}};/**
* Your SmallestInfiniteSet object will be instantiated and called as such:
* SmallestInfiniteSet* obj = new SmallestInfiniteSet();
* int param_1 = obj->popSmallest();
* obj->addBack(num);
*/
6114. 移动片段得到字符串(135)
代码实现(自解)
classSolution{public:boolcanChange(string start, string target){// string s, t;
vector<pair<char,int>> s, t;int n = start.size();for(int i =0; i < n; i++){if(start[i]!='_') s.push_back({start[i], i});if(target[i]!='_') t.push_back({target[i], i});}if(s.size()!= t.size())returnfalse;
n = s.size();for(int i =0; i < n; i++){if(s[i].first != t[i].first)returnfalse;if(s[i].first =='L'&& s[i].second < t[i].second)returnfalse;if(s[i].first =='R'&& s[i].second > t[i].second)returnfalse;}returntrue;}};
6115. 统计理想数组的数目(136)
代码实现(看题解)
classSolution{constint MOD =1000000007;constint MAXP =16;public:intidealArrays(int n,int K){// nlnn 求因数
vector<vector<int>>fac(K +1);for(int i =1; i <= K; i++)for(int j = i <<1; j <= K; j += i) fac[j].push_back(i);// 计算子问题的答案
vector<vector<longlong>> f;
f.resize(K +1,vector<longlong>(20));for(int i =1; i <= K; i++){
f[i][1]=1;for(int j =2; j <= MAXP; j++)for(int t : fac[i]) f[i][j]=(f[i][j]+ f[t][j -1])% MOD;}// 求组合数
vector<vector<longlong>> C;
C.resize(n +1,vector<longlong>(20));
C[0][0]= C[1][0]= C[1][1]=1;for(int i =2; i <= n; i++){
C[i][0]=1;for(int j =1; j <= i && j <= MAXP; j++) C[i][j]=(C[i -1][j]+ C[i -1][j -1])% MOD;}// 统计最终答案longlong ans =0;for(int i =1; i <= K; i++)for(int j =1; j <= MAXP; j++) ans =(ans + C[n -1][j -1]* f[i][j])% MOD;return ans;}};