洛谷 CSP-J2020 优秀的拆分 + 直播获奖

news2024/9/25 1:25:47

第一道题目:优秀的拆分:

样例以及数据范围:

 

这道题目我个人一开始是并未做出来的,因为一开始我并没有去学习位运算,然后请教了一下他人,接下来我将对这道题的思路进行解答:首先我们看到n的范围是在1的七次方之内的,所以用int 型即可,而一亿大概就对应着1左移三十位,所以我们输入n之后,先进行n是否为奇数的判断,如果是奇数,那必定没有优秀的拆分,直接输出一即可,否则n如果是偶数的话,我们不妨将偶数n想象成对应的二进制数,因为从大到小输出结果,所以我们可以考虑从30到0进行枚举,其实也可以更小,然后将1左移i位的结果与n的二进制数进行按位与操作,这样可以检查n的二进制数表示中第i位是否为1。如果为1,就需要输出2的i次方。接下来上代码:

#include<iostream>
using namespace std;
int n;
int main(){
	cin>>n;
	if(n%2==1){
		cout<<"-1"<<endl;
		return 0;
    }
	for(int i=30;i>=0;i--){
		int ans=1<<i;
		if((n & (1<<i)) != 0){
			cout<<ans<<' ';
		}
	}
	cout<<endl;
	return 0;
}

代码很短也比较好理解,只需要掌握位运算中按位与操作符 “&”的含义即可,有兴趣的读者可以去详细了解一下位运算,接下来看第二道题目直播获奖:

 这道题我一开始的想法是读入n还有w之后,利用一个数组来存储当前评出了的所有成绩,然后从1到n进行枚举,每次枚举中先利用t计算出获奖人数,然后用sort函数对数组进行从大到小的排序,然后输出这时候数组中第t个元素就是这时候获奖的最小成绩,只不过这样的时间复杂度明显有点偏高了,首先给出我一开始65分的代码:

#include<bits/stdc++.h>
using namespace std;
int n,w;
int a[100010];
bool cmp(const int &x,const int &y){
	return x>y;
}
int main(){
	cin>>n>>w;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	    sort(a+1,a+i+1,cmp);
		int t=max(1,(int)(i*w*0.01));
		cout<<a[t]<<' ';
	}
	return 0;
}

然后我又想了一下能不能对代码进行优化呢,当然是可以的,我考虑用插入排序,以下是代码:

#include<bits/stdc++.h>
using namespace std;
int n,w,a[110000];
int main(){
	cin>>n>>w;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	for(int i=1;i<=n;i++){
		for(int j=i;j>=1;j--){
			if(j==1 || a[j-1]>a[j])
			break;
			swap(a[j],a[j-1]);
		}
		int k=max(1,i*w/100);
		cout<<a[k]<<' ';
	}
	cout<<endl;
	return 0;
}

欸,这时候多了二十分诶,所以这道题目使用插入排序很明显是比使用sort函数好的,但是还是没有获得满分,观察到所有人的分数都是在600以内的,所以我利用了一个数组cnt,来存储一下获得对应成绩的人的个数,在此基础上,我继续进行了优化代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,w,a[110000],cnt[610];
int main(){
	cin>>n>>w;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	for(int i=1;i<=n;i++){
		int k=max(1,i*w/100);
		cnt[a[i]]++;
		int s=0;
		for(int j=600;j>=0;j--){
            /*如果总共获奖的人数大于已经能够获奖的人数并且总共能够获奖的人数小于等于已经能够获奖的 
            人数加上成绩为j的人数之和,则j就为对应时刻中能够获奖的最低分数*/
			if(k>=s+1 && k<=s+cnt[j]){
		    cout<<j<<' ';
			break; 		
		}
		s+=cnt[j];
	}
	}
	cout<<endl;
	return 0;
}

 首先读入n,w还有所有的评分,然后接下来我们用for循环来从1枚举到n,对于每一次枚举,cnt数组中,下标值等于对应a数组中下标为i的加一个,也就是成绩为a[i]的人数加一,然后我们引入了一个s,这个s可以看作在每一次枚举过程中能够获奖的人数,我们插入一个从600枚举到0的循环,当寻找到能够获奖的最低分数的时候,就跳出循环,每次循环中s的初始值都是0。这段代码的核心思想就是对于每次直播打分,计算出该次打分之后能够获奖的人数k,然后先对分数为该次打分的计数器cnt加一,然后再引入s,这个s可以理解为已经确定能够获奖的人数,然后我们用一个for循环将分数从高到底进行枚举,如果在某次枚举中发现,如果k的值是大于等于已经确定能够拿奖的人数的并且看的值是小于已经可以拿奖的人数加上成绩为j的人数的,就输出这时候的j代表能够获奖的最低分数。

感谢读者的观看,如果觉得有收获的话,希望能够给我一个点赞,十分感谢!

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

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

相关文章

安捷伦Agilent 8720ES矢量网络分析仪

Agilent安捷伦8720ES S-参数矢量网络分析仪 50MHz至20GHz 100 dB 的动态范围 优异的测量精度 2个测量通道 4个显示通道 频率和功率扫描 快扫描和数据传输速度 通过/失败测试&#xff0c;强大的标记功能 电校准&#xff08;ECal&#xff09; 内部使用测试序列的自动化 可选时域…

【网络编程】基于UDP数据报实现回显服务器程序

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 前言 我们如果…

自媒体短视频音效、配乐素材哪里找?

找短视频音乐、音效素材就上这5个网站&#xff0c;免费下载&#xff0c;建议收藏。 1、潮点视频 https://shipin520.com/shipin-yy/?from_code2510 一个专门分享高质量视频的网站&#xff0c;站内还有非常丰富的配乐素材&#xff0c;全部都有详细的分类&#xff0c;可以选择…

【深度学习-目标检测】02 - Fast R-CNN 论文学习与总结

论文地址&#xff1a;Fast R-CNN 论文学习 1. 摘要&#xff08;Abstract&#xff09; Fast R-CNN方法的提出&#xff1a; 论文提出了一种快速区域卷积网络的办法&#xff0c;基于之前的R-CNN网络进行改进。 效率和准确性的提升&#xff1a; Fast R-CNN 在之前的工作基础上&a…

CentOS环境下Nacos2.3集成PostgreSQL

title: CentOS环境下Nacos2.3集成PostgreSQL date: 2023-12-21 19:15:00 categories: Nacos description: CentOS环境下Nacos2.3集成PostgreSQL 1. 目录 1. 目录2. 简介3. 安装部署 3.1. 部署模式3.2. 环境准备3.3. 下载安装文件3.4. PostgreSQL插件 3.4.1. 下载地址3.4.2. 结…

南邮算法期末复习

算法复习 知识点 多项式时间复杂度是指在多项式阶内&#xff08;例如&#xff0c;O(n^2), O(n^3)&#xff09;增长的算法。AOE网中的关键路径 &#xff0c;就是完成整个网络所需的最短时间&#xff0c;亦最长路径 &#xff0c;AOE网中&#xff0c;往往有若干项活动可以平行的…

ThunderSearch(闪电搜索器)_网络空间搜索引擎工具_信息收集

文章目录 ThunderSearch简介1 项目地址2 使用方式2.1 配置文件config.json说明2.2 构建和运行 3 使用式例 ThunderSearch简介 ThunderSearch&#xff08;闪电搜索器&#xff09;是一款使用多个(【支持Fofa、Shodan、Hunter、Zoomeye、360Quake网络空间搜索引擎】网络空间搜索引…

如何实现https密钥对登录方式

先安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker.service systemctl enable docker.service yum install -y docker…

为何教育行业需要搭建自己的知识付费平台,而非入驻其他公域流量平台

在当今的知识经济时代&#xff0c;教育行业正面临着前所未有的机遇和挑战。随着知识付费市场的蓬勃发展&#xff0c;越来越多的教育机构和个人教师选择进入这一领域&#xff0c;以扩大影响力并实现知识变现。然而&#xff0c;在选择进入知识付费市场的路径时&#xff0c;教育行…

2023年12月【考试战报】|ORACLE OCP 19C考试通过

2023年10月【考试战报】|ORACLE OCP 19C考试通过-CSDN博客文章浏览阅读122次。自OCP认证进入中国以来&#xff0c;越来越被大多数DBA所认可&#xff0c;也越来越被企业所重视&#xff0c;90%以上DBA深造&#xff0c;都会选择OCP认证。随着OCP认证在全国范围内的普及&#xff0c…

【hacker送书第11期】Python数据分析从入门到精通

探索数据世界&#xff0c;揭示未来趋势 《Python数据分析从入门到精通》是你掌握Python数据分析的理想选择。本书深入讲解核心工具如pandas、matplotlib和numpy&#xff0c;助您轻松处理和理解复杂数据。 通过matplotlib、seaborn和创新的pyecharts&#xff0c;本书呈现生动直…

poi-tl之图表操作(基于模板)

poi-tl&#xff08;poi template language&#xff09;是Word模板引擎&#xff0c;使用Word模板和数据创建很棒的Word文档。 核心思想是在模板中放一个占位符&#xff0c;在代码中替换该占位符即可。 poi官网地址 点这里 基础工作 maven配置 <dependency><groupId&g…

猫头虎分享2023年12月17日博客之星候选--城市赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–城市赛道博主文章数据 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开…

云渲染UE4像素流送搭建(winows、ubuntu)

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行&#xff0c;用户可以通过浏览器操作虚幻引擎应用程序&#xff0c;客户端无需下载虚幻引擎&#xff0c;本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

给零基础朋友的编程课07 - 代码

给零基础朋友的编程课07-初识色彩、初识变量、案例3讲解_哔哩哔哩_bilibili Code: // // 案例3 // //// -设定画面- // size(1000, 1000); // 设置画面大小 background(7, 119, 132); // 设置背景颜色// - 绘画 - //// 1 绘制垂线 // 设定线条风格 …

医药保健品企业网站搭建的作用是什么

市场中的保健品品牌非常多&#xff0c;很多医院或药店都有售卖&#xff0c;同时也有不少经常消费的人群&#xff0c;但从行业整体趋势来看&#xff0c;目前国内真正信任保健品的人并不算非常多&#xff0c;行业缺少对市场消费人群的教育及行业的相关限制&#xff0c;无论对品牌…

超炫酷的网红游戏主播/带货达人/歌手/人物介绍视频素材PR模板

Premiere网红//游戏主播、带货达人\主唱歌手\DJ晚会派对人物介绍视频素材pr模板下载。 包括&#xff1a; 全高清&#xff08;19201080&#xff09; 4K&#xff0c;&#xff08;38402160&#xff09; 全高清&#xff08;19201080&#xff09; 4K&#xff0c;&#xff08;3840216…

Tailwind CSS 原子化开发初体验

Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何模板中的 CSS 类&#xff08;class&#xff09;名&#xff0c;然后生成相应的样式代码并写入到一个静态 CSS 文件中。他快速、灵活、可靠&#xff0c;没有运行时负担。再也不用为了取一个 classname 类名…

使用 FFmpeg 清除文件夹下所有 .mp4 文件声音

运行以下命令来清除声音&#xff1a; ffmpeg -i input.mp4 -c copy -an output.mp4这个命令会将 “input.mp4” 替换为你要处理的 .mp4 文件名。它会生成一个新的文件名为 “output.mp4” 的文件&#xff0c;该文件是没有声音的副本。 如果你想要直接替换原始文件&#xff0c;…

文件名修改方法:文件批量重命名,并将扩展字母统一转换为大写

在文件管理中&#xff0c;文件名的修改是一项常见的任务。有时候&#xff0c;可能要将文件名进行批量重命名&#xff0c;或者将所有的扩展名统一转换为大写。那怎么操作会更简单快速些呢&#xff1f;下面将详细讲解云炫文件管理器如何实现这一目标&#xff0c;批量用随机数字重…