当前位置: 首页 > article >正文

力扣第 126 场双周赛(A~B)

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;
    }
};


http://www.kler.cn/a/271590.html

相关文章:

  • 【视频+图文详解】HTML基础4-html标签的基本使用
  • 蓝桥杯之c++入门(一)【C++入门】
  • C28.【C++ Cont】顺序表的实现
  • 【MySQL】初始MySQL、库与表的操作
  • 嵌入式知识点总结 ARM体系与架构 专题提升(三)-中断与异常
  • ubuntu 更新24LTS中断导致“系统出错且无法恢复,请联系系统管理员”
  • 每日一题:LeetCode2.两数相加
  • mysql读写分离及高可用集群常见问题
  • 观测云在 .NET 业务中分析性能问题的最佳实践
  • OpenCV(七)——灰度图像的阙值处理以及图像的边界填充
  • 网络面试题
  • 模型的参数量、计算量、延时等的关系
  • 数据结构的概念大合集04(队列)
  • 学习vue3第五节(reactive 及其相关)
  • 裁员潮下,打工人的自我修养
  • 微信小程序一次性订阅requestSubscribeMessage授权和操作详解
  • MyBatis中 #{} 和 ${} 区别
  • Python实战:NumPy数组与矩阵操作入门
  • 提高安全投资回报:威胁建模和OPEN FAIR™风险分析
  • 数据类型【mysql数据库】
  • 数据可视化-ECharts Html项目实战(2)
  • 【Python循环3/5】条件循环语句
  • SeAndroid 安全策略机制
  • 基于单片机的智能小车泊车系统设计
  • Prompt Engineering(提示工程)
  • Rust的async和await支持多线程运行吗?