0
点赞
收藏
分享

微信扫一扫

【UE5】非持枪状态蹲姿移动的动画混合空间

100262. 求出加密整数的和

321变成333,全都变成最大的那一个。

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

class Solution{
public:
    int bitmax(int x){
        int res=0;
        while(x){
            res=max(x%10,res);
            x/=10;
        }
        return res;
    }
    int bitlen(int x){
        int res=0;
        while(x){
            res++;
            x/=10;
        }
        return res;
    }
    
    int sumOfEncryptedInt(vector<int>& nums) {
        int ans=0;
        per(i,0,nums.size()-1){
            int res=bitmax(nums[i]);
            int tmp=bitlen(nums[i]);
            
            int sum=0;
            while(tmp--){
                sum+=res;
                res*=10;
            }
            
            ans+=sum;
        }
        return ans;
    }
};

100209. 执行操作标记数组中的元素

每次访问前先执行两个操作。

减去下标为x的数,如果没有则忽略。

最小的前y个数,全部删除。

每次输出目前数组求和。

考虑用优先队列维护数组的最小值,因为要删前y个,所以当值相等的时候,需要按照下标从小到大排序,需要注意的是小根堆是相反的,所以比较时使用降序。

#include <bits/stdc++.h>

#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define all(x) x.begin(),x.end()
#define EX exit(0)
#define fr first
#define se second
#define endl '\n'
using namespace std;
using ll=long long;

class Solution{
public:
    vector<long long>ans;

    struct Node{
        ll val,idx;
    };

    struct CMP{
        bool operator() (const Node &A,const Node &B)const{
            if(A.val>B.val)return true;
            if(A.val==B.val)return A.idx>B.idx;
            return false;
        }
    };

    priority_queue<Node,vector<Node>,CMP>q;

    vector<long long> unmarkedSumArray(vector<int>& nums, vector<vector<int>>& queries) {
        ll sum=0;
        per(i,0,nums.size()-1){
            q.push({nums[i],i});
            sum+=nums[i];
        }

        bool vis[nums.size()+1];
        per(i,0,nums.size()-1)vis[i]=false;

        per(i,0,queries.size()-1){
            auto j=queries[i];
            if(!vis[j[0]]){
                vis[j[0]]=true;
                sum-=nums[j[0]];
            }
            //j[1];//最小的j[1]个

            while(j[1]--){
                while(q.size() and vis[q.top().idx])q.pop();
                if(q.size()){
                    sum-=q.top().val;
                    vis[q.top().idx]=true;
                    q.pop();
                }
            }

            ans.push_back(sum);
        }
        return ans;
    }
};
举报

相关推荐

0 条评论