Leetcode---363周赛

news2024/11/25 0:47:53

题目列表

2859. 计算 K 置位下标对应元素的和

2860. 让所有学生保持开心的分组方法数

2861. 最大合金数

2862. 完全子集的最大元素和

一、计算k置为下标对应元素的和

简单题,直接暴力模拟,代码如下 

class Solution {
public:
    int sumIndicesWithKSetBits(vector<int>& nums, int k) {
        int ans=0;
        for(int i=0;i<nums.size();i++){
            if(__builtin_popcount(i)==k)//库函数,计算二进制表示中1的个数
                ans+=nums[i];
        }
        return ans;
    }
};

//如果不知道上面的库函数,也可以自己写个函数计算一下,如下
bool GetCount(int i)
{
    int cnt=0;
    while(i){
        cnt++;
        i&=(i-1);
    }
    return cnt==k;
}

 二、让所有学生保持开心的分组方法数

这题首先要把题意理解清楚,题目要看对,首先我们明确一共有nums.size()+1种可能的方案,即选中的学生人数为0~nums.size()之间的某个数,我们再来看一眼需要满足的条件,严格大于,严格小于 ,有点二分的意思在里面(需要排序),然后我们再来具体研究一下这两个条件,本质就是让被选中的学生的nums尽可能小,没被选中的学生的nums尽可能大,如果我们将数组排序,那么这两个条件的判断不就简简单单了吗?在看一眼答案的数据范围,直接暴搜,注意边界条件,代码如下

class Solution {
public:
    int countWays(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        // 1是所有人都被选上的情况(数据范围保证判定条件一定成立)
        // nums[0]>0判断的是一个都不选的情况
        int ans=1+(nums[0]>0);
        for(int i=1;i<nums.size();i++){//枚举选中的人数
            ans+=(nums[i-1]<i&&nums[i]>i);
        }
        return ans;
    }
};

三、最大合金数

很多人看这道题的数据这么多,就不想做了,但是我们先不要急,先耐着性子看看题目,说必定有反转呢?结果看到了倒数最第二句话,直接思路就清晰了,那这还有啥好说的,直接暴力枚举每种机器能制造的最大合金数,然后取最大值,当然还是不能太暴力,这里要用二分,否则会超时,那么为什么能用二分呢?

能不能用二分主要还是看是否具备二段性,如果合金数>该机器所能制造的最大和金属,那么剩余的budget<0,如果如果合金数<该机器所能制造的最大和金属,那么剩余的budget>=0,很显然满足二段性。然后我们在考虑一下二分的上下界,相信找上下界大家都会,这里就不多讲了

代码如下

class Solution {
public:
    int maxNumberOfAlloys(int n, int k, int budget, vector<vector<int>>& composition, vector<int>& stock, vector<int>& cost) {
        int ans=0;
        int mx=*min_element(stock.begin(),stock.end())+budget;
        for(int i=0;i<k;i++){
            int left=1,right=mx;
            while(left<=right){
                int mid=left+(right-left)/2;
                long long s=budget;//这里用long long 防止溢出
                for(int j=0;j<n;j++){
                    long long x=1LL*composition[i][j]*mid;
                    s-=(x>stock[j]?x-stock[j]:0)*cost[j];
                    if(s<0){
                        right=mid-1;
                        break;
                    }
                }
                if(s>=0) left=mid+1;
            }
            ans=max(ans,right);
        }
        return ans;
    }
};

四、完全子集的最大元素和

这题主要考验数学,和你发现规律的能力,是个思维题,代码不是很难。这题的关键就在于这个完全集,本质也就是两个数的乘积为完全平方数,那么两个数满足什么条件,才能让它们的乘积为完全平方数呢?

代码如下

class Solution {
public:
    long long maximumSum(vector<int>& nums) {
        function<int(int)>f=[&](int x)->int{//用来计算每个数字的i
            int res=1;
            for(int i=2;i<=sqrt(x);i++){
                int cnt=0;
                while(x%i==0){
                    cnt++;
                    x/=i;
                }
                if(cnt%2) res*=i;
            }
            if(x>1) res*=x;
            return res;
        };
        int n=nums.size();
        long long s[n+1];
        memset(s,0,sizeof(s));
        for(int i=1;i<=n;i++){
            s[f(i)]+=(long long)nums[i-1];
        }
        return *max_element(s,s+n+1);
    }
};

//或者直接算出每组的和
class Solution {
public:
    long long maximumSum(vector<int>& nums) {
        long long ans=0;
        int n=nums.size();
        for(int i=1;i<=n;i++){
            long long s=0;
            for(int j=1;j<=sqrt(n/i);j++){
                s+=nums[i*j*j-1];
            }
            ans=max(ans,s);
        }
        return ans;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始学习CTF,看完不信你学不会!

一、CTF简介 简介 中文一般译作夺旗赛&#xff08;对大部分新手也可以叫签到赛&#xff09;&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式 CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术…

Linux——文件系统

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——文件系统 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;上期我们了解了文件在内存中得组织方式&#xff0c;那么文件在磁盘中…

ElasticSerach+MongoDB:实现文章检索历史功能

实现目标&#xff1a; 展示用户的搜索记录10条&#xff0c;按照搜索关键词的时间倒序可以删除搜索记录保存历史记录&#xff0c;保存10条&#xff0c;多余的则删除最久的历史记录 数据库的选择&#xff1a; 用户的搜索记录&#xff0c;需要给每一个用户都保存一份&#xff0c;数…

第3讲:vue路由安装配置,带参路由,子路由配置及应用

路由的安装与基本使用 vue-router是Vue官方的路由插件,它和Vue是深度集成,适用于构建单页面应用 vue-router的安装 //vue2路由配置npm install vue-router@3.0.2 或 cnpm install vue-router@3.0.2在具体应用的开发中我们一般会在src目录下新建一个名为router的目录,并在r…

加速乐源码(golang版本)

一、分析 分析过程网上有很多,这里只说个大概,主要是提供golang源码 请求网站,发现前两次请求都会返回521,第三次请求成功,说明前两次请求肯定是干了什么事情;使用接口请求工具模拟请求分析该过程 使用postman工具请求 a. 第一次请求会在响应头返回jsluid,返回内容中拼接…

滚动轴承 调心球轴承 外形尺寸

声明 本文是学习GB-T 281-2013 滚动轴承 调心球轴承 外形尺寸. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了符合 GB/T 273.3—1999 的调心球轴承及带紧定套的调心球轴承(以下简称轴承)的 外形尺寸。 本标准适用于调心球轴承…

【数字IC/FPGA】基于握手的数据广播

简介 本文介绍了一种基于握手协议的数据广播方式。事实上,该场景可以简化为模块的一对多握手,并且下游的各个模块可以独立的完成握手(与之相对的是下游模块一起完成握手,相比之下,下游各个模块可以独立完成握手显然更加普适、灵活)。 下图展示了模块一对多握手的示意图:…

阿里云服务器经济型e实例详细介绍_e系列性能价格表

阿里云服务器ECS推出经济型e系列&#xff0c;经济型e实例是阿里云面向个人开发者、学生、小微企业&#xff0c;在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器&#xff0c;CPU采用Intel Xeon Platinum架构处理器&#xff0c;支持1:1、1:2、1:4多种处理…

GLTF编辑器如何合并相同材质的Mesh

1、什么是模型材质合批 模型材质合批是一种技术手段&#xff0c;主要用于优化渲染性能和提高图形应用程序的帧率。它通过将多个模型的材质进行合并&#xff0c;从而减少渲染时的绘制调用次数。 在计算机图形学中&#xff0c;每个模型都有一个或多个材质&#xff0c;这些材质定义…

【教程】视频汇聚/视频监控管理平台EasyCVR录像存储功能如何优化?具体步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。视频监控系统EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、…

使用 PyTorch 的计算机视觉简介 (5/6)

一、说明 本文主要介绍CNN中在pytorch的实现&#xff0c;其中VGG16网络&#xff0c;数据集来源&#xff0c;以及训练过程&#xff0c;模型生成和存储&#xff0c;模型调入等。 二、预训练模型和迁移学习 训练 CNN 可能需要大量时间&#xff0c;并且该任务需要大量数据。但是&am…

【每日一题】441. 排列硬币

441. 排列硬币 - 力扣&#xff08;LeetCode&#xff09; 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算并返回可形成 完整…

位段 联合体 枚举

Hello好久不见&#xff0c;今天分享的是接上次结构体没有分享完的内容&#xff0c;这次我们讲讲位段 枚举和联合体的概念以及他们的用法。 2.1 什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或signed int 。 …

Unity下tga和png格式图片打包成AB包大小和加载速度测试

测试素材 测试素材&#xff0c;一张tga格式&#xff0c;一张png格式&#xff0c;他们的图像尺寸一样都是8K图。 两张图在AssetBundles里显示 Tga格式的图明显大很多&#xff0c;我们打包成ab包看看。 在PC 打包后看&#xff0c;明显大小一样&#xff0c;我们进行ab包加载&am…

通俗易懂讲解拥塞控制

文章目录 前言一、拥塞控制是什么&#xff1f;二、什么是拥塞窗口&#xff1f;和发送窗口有什么关系呢&#xff1f;三、慢启动四、阻塞避免算法五、拥塞发生状态时的算法以及快速重传以及快速恢复总结 前言 TCP的拥塞控制&#xff0c;以前觉得老复杂了&#xff0c;今天重温了一…

HTML - input type=file 允许用户选择多个文件

效果 示例 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><!-- When the multiple Boolean attribute is specified, the file input allows the user to select more than o…

【漏洞复现】企望制造 ERP命令执行

漏洞描述 由于企望制造 ERP comboxstore.action接口权限设置不当&#xff0c;默认的配置可执行任意SQL语句&#xff0c;利用xp_cmdshell函数可远程执行命令&#xff0c;未经认证的攻击者可通过该漏洞获取服务器权限。 免责声明 技术文章仅供参考&#xff0c;任何个人和组织…

Python经典练习题(二)

文章目录 &#x1f340;题目一&#x1f340;第二题&#x1f340;第三题&#x1f340;第四题&#x1f340;第五题 &#x1f340;题目一 古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&am…

【操作系统笔记二】链接阶段ELF文件

链接阶段&#xff1a;符号解析 链接阶段主要包含&#xff1a; 符号解析重定位 一般情况下&#xff0c;每个 C 文件可以看成一个程序模块&#xff0c;比如下边的main.c就是一个程序模块 #include <stdio.h>extern int shared; int sum(int *a, int n); int array[2] …

【C语言】指针的进阶(四)—— 企业笔试题解析

笔试题1&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } 【答案】在x86环境下运行 【解析】 &a是取出整个数组的地址&#xff0c;&a就表示整个数组&#xff0c;因此…