【牛客】2024牛客寒假算法基础集训营6ABCDEGHIJ

文章目录

  • A 宇宙的终结
    • 题目大意
    • 主要思路
    • 代码
  • B 爱恨的纠葛
    • 题目大意
    • 主要思路
    • 代码
  • C 心绪的解剖
    • 题目大意
    • 主要思路
    • 代码
  • D 友谊的套路
    • 题目大意
    • 主要思路
    • 代码
  • E 未来的预言
    • 题目大意
    • 主要思路
    • 代码
  • G 人生的起落
    • 题目大意
    • 主要思路
    • 代码
  • I 时空的交织
    • 题目大意
    • 主要思路
    • 代码
  • J 绝妙的平衡
    • 题目大意
    • 主要思路
    • 代码

A 宇宙的终结

题目大意

在给定的某个区间内找到一个数,它是3个不同素数的积。

主要思路

这里范围比较小,而且是乘积的形式,如果其中最小的俩个数字分别是2和3,那么第三个数的最大取值也不会超过100/6,所以枚举前面的几个质数,然后暴力查找就可以了。

代码

#include<bits/stdc++.h>
using namespace std;int main()
{int l,r;int a[]={2,3,5,7,11,13,17,19,21};cin>>l>>r;for(int i=0;i<8;++i)for(int j=i+1;j<8;++j)for(int k=j+1;k<8;++k){if(l<=a[i]*a[j]*a[k]&&a[i]*a[j]*a[k]<=r){cout<<a[i]*a[j]*a[k];return 0;}}cout<<-1;return 0;
}

B 爱恨的纠葛

题目大意

给定俩数组,定义了一个叫做亲密度的东西就是ab俩数组一一对应相减取绝对值的最小值,现在对数组a进行排序,求亲密度最小时的a数组

主要思路

我们只需要找到其中一对就可以了,剩下的随便排都可以,可以把数组a预处理排序,然后对于每一个b数组中的数,在a数组钟进行二分查找最接近的那一个做差,然后记录哪一个是最接近的,最后在a数组中直接调换然后输出即可

代码

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;
int a[N],b[N];int main()
{int n;cin>>n;for(int i=0;i<n;++i)cin>>a[i];for(int i=0;i<n;++i)cin>>b[i];if(n==1){cout<<a[0];return 0;}sort(a,a+n);
//     for(int i=0;i<n;++i)
//     {
//         cout<<a[i]<<" ";
//     }int minzhi=1e9+10;int minweizhi=0,mubiaoweizhi=0;for(int i=0;i<n;++i){int left=0,right=n-1;while(left<right){int mid=(left+right)>>1;if(a[mid]<b[i])left=mid+1;else right=mid;}int idx=left;int cha=INT_MAX;if(idx==0){if((int)abs(a[0]-b[i])<(int)abs(a[1]-b[i])){cha=(int)abs(a[0]-b[i]);idx=0;}else{cha=(int)abs(a[1]-b[i]);idx=1;}}else if(idx==n-1){if((int)abs(a[n-1]-b[i])<(int)abs(a[n-2]-b[i])){cha=(int)abs(a[n-1]-b[i]);idx=n-1;}else {cha=(int)abs(a[n-2]-b[i]);idx=n-2;}}else {int idx2;if((int)abs(b[i]-a[idx-1])<(int)abs(a[idx]-b[i])){cha=(int)abs(b[i]-a[idx-1]);idx2=idx-1;}else {cha=(int)abs(a[idx]-b[i]);idx2=idx;}if(cha>(int)abs(a[idx+1]-b[i])){cha=(int)abs(a[idx+1]-b[i]);idx2=idx+1;}idx=idx2;}if(cha<minzhi){minzhi=cha;minweizhi=i;mubiaoweizhi=idx;}}swap(a[minweizhi],a[mubiaoweizhi]);for(int i=0;i<n;++i){cout<<a[i]<<" ";}return 0;
}

C 心绪的解剖

题目大意

把一个正整数分解成三个斐波那契数的和

主要思路

简单打表看了一下,最多也就是48个数字,直接暴力枚举注意点技巧就行

代码

#include<bits/stdc++.h>
#define debug(x) cout<<#x<<" = "<<x<<"\n"
using namespace std;long long nums[50]{0,1};
int n=49;void init()
{for(int i=2;i<49;++i){nums[i]=nums[i-1]+nums[i-2];}
}void solve()
{int target;cin>>target;// 枚举 afor (int i = 0; i < n; ++i) {int k = n - 1;for (int j = i ; j < n; ++j) {while (j <= k && nums[i] + nums[j] + nums[k] > target) {--k;}if (nums[i] + nums[j] + nums[k] == target) {cout<<nums[i]<<" "<<nums[j]<<" "<<nums[k]<<"\n";return ;}}}cout<<"-1\n";
}int main()
{init();int t;cin>>t;while(t--){solve();}return 0;
}

D 友谊的套路

题目大意

已知红队每一局获胜的概率为p,请问最终这场对战出现让二追三的概率是多少

主要思路

出现让二追三的局面的时候也就意味着前面四局第一第二输了,第三第四是赢的,后面那一局不用管就好

代码

#include<bits/stdc++.h>
using namespace std;int main()
{double p;cin>>p;printf("%.8lf",pow(p,2)*pow(1-p,2));return 0;
}

E 未来的预言

题目大意

根据比赛信息,判断比赛得出胜负的时候,一共进行了多少局。输出比赛的情况

主要思路

一个简单的模拟,遍历字符串累加计数

代码

#include<bits/stdc++.h>
using namespace std;int main()
{char x;int n;cin>>x;cin>>x;cin>>n;string s;cin>>s;int len=s.size();int r=0,p=0;for(int i=0;i<len;++i){if(s[i]=='R')r++;else p++;if(r==(n+1)/2){cout<<"kou!\n"<<i+1;return 0;}else if(p==(n+1)/2){cout<<"yukari!\n"<<i+1;return 0;}}cout<<"to be continued.\n"<<len;return 0;
}

G 人生的起落

题目大意

形如 ( a , b , a ) , a > b (a,b,a),a>b (a,b,a),a>b的三元组称为“v-三元组”。 构造一个长度为n,和为S,且恰好有k个“v-三元组”的正整数数组。

主要思路

21212121这样够了后面全部放1,然后在考虑剩下数字,如果不够是-1,相同直接输出,如果还有剩余又看看还有没有空位,如果有就把剩下全给最前面(实际上是开头插入,如果给末尾可能刚刚好凑多一个212),没有空位就看看能不能对2集体加1,如果不能就-1,不然就一直+1直到不能操作,然后剩下数字丢给1(思路来自黄大师)

代码

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
#define pb push_back
int main()
{ios::sync_with_stdio(false);cin.tie(0);int t;cin>>t;while(t--){int n,s,k;cin>>n>>s>>k;if(n==1&&k==0){cout<<s<<endl;continue;}else if( (n==1&&k!=0)||(n==2&&k!=0) ){cout<<-1<<endl;continue;}else if(n==2&&k==0){cout<<1<<" "<<s-1<<endl;continue;}else if(k==0){for(int i=1;i<n;i++) cout << "1" << ' ';cout << s-n+1 << endl;continue;}else if(n<2*k+1) {cout<<-1<<endl;continue;}else if(k&&s<n+k+1) {cout<<-1<<endl;continue;}else {ll t=(s-(n-(k+1)))/(k+1);vector<ll> ans;for(int i=1;i<=k;i++){ans.pb(t);ans.pb(1);s-=t+1;}ans.pb(t); s-=t;if(ans.size()==n){t=s/(n/2);for(int i=0;i<=n/2-1;i++){ans[i*2+1]+=t;s-=t;}t=0;while(s){ans[t*2+1]++;s--;t++;}if(n>1&&ans[1]==ans[0]) {cout << "-1\n";continue;}}else{t=ans.size();while(ans.size()<n){ans.pb(1);s--;}ans[t]+=s;}for(int i=0;i<=n-1;i++) cout << ans[i] << " \n"[i==n-1];}}return 0;
}

I 时空的交织

题目大意

选择一个子矩形,使得该子矩形所有元素的和尽可能大。

主要思路

假设选定的矩阵区间为 (r_i, r_j) : (c_i, c_j),则子矩阵的和为:
在这里插入图片描述
问题转化为求数组 a 和 b 的一个非空连续子数组和乘积的最大值。

此外,a 数组和 b 数组的元素可以为负数,因此同时求出区间和的最大值和最小值,两两相乘取最大即可。

代码

#include<bits/stdc++.h>
#define debug(x) cout<<#x<<" = "<<x<<"\n"
using namespace std;const int N = 1e5+10;
long long a[N],b[N];int main()
{int n,m;long long maxzhi1=INT_MIN,maxzhi2=INT_MIN;cin>>n>>m;long long minzhi1=INT_MAX,minzhi2=INT_MAX;for(int i=0;i<n;++i){cin>>a[i];}for(int i=0;i<m;++i){cin>>b[i];}long long sum=0;long long sum2=0;for(int i=0;i<n;++i){if(sum+a[i]>0){sum+=a[i];maxzhi1=max(maxzhi1,sum);}else {sum=0;maxzhi1=max(maxzhi1,a[i]);}//if(sum2+a[i]<0){sum2+=a[i];minzhi1=min(minzhi1,sum2);}else {sum2=0;minzhi1=min(minzhi1,a[i]);}}
///sum=0;sum2=0;for(int i=0;i<m;++i){if(sum+b[i]>0){sum+=b[i];maxzhi2=max(maxzhi2,sum);}else {sum=0;maxzhi2=max(maxzhi2,b[i]);}/if(sum2+b[i]<0){sum2+=b[i];minzhi2=min(minzhi2,sum2);}else {sum2=0;minzhi2=min(minzhi2,b[i]);}}long long ans=INT_MIN;ans=max(ans,minzhi1*minzhi2);ans=max(ans,maxzhi1*maxzhi2);ans=max(ans,minzhi1*maxzhi2);ans=max(ans,maxzhi1*minzhi2);cout<<ans;return 0;
}

J 绝妙的平衡

题目大意

给定一棵有根树,若干个节点为红色。 为每个节点赋值1或2,使得每个以红色节点为根的子树,其节点值之和为3的倍数。

主要思路

对于每个红色节点,如果它没有白色子节点,则它的子树除它以外的和已经是的倍数,它为或都不可能再使它的子树和为的倍数。

如果它至少有1个白色子节点,则它和白色子节点可以配合使得它的子树和为的倍数。

因此,按DFS逆序遍历,白色节点先赋值为。若红色节点除其本身外,和不是的倍数,则用它补上;否则将任一白色子节点改为,它赋为。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=100010;
vector<int> fa[N];
bool flag=1;
int sum[N];//每个根节点的子树权值之和
int tri[N]; //每个节点的值
char color[N];
int n;
void dfs(int u)
{bool st=0;if(color[u]=='R') st=1; //如果是红树先假设子树全为红树for(auto k:fa[u])  //遍历他的所有子树{dfs(k);  //搜索他的子树 if(color[k]=='W')  // 如果是白色假设条件不成立并且将这棵树的权值加到他的根节点  {st=0;sum[u]+=sum[k];  }}if(st) flag=0; //如果该节点为红色并且该结点的子树全为红色则不满足条件
}
void dfs1(int u)
{if(color[u]=='R'){if(sum[u]%3==1){tri[u]=2;for(auto k:fa[u]){if(color[k]!='R'){tri[k]=2;break;}}}else if(sum[u]%3==2){tri[u]=2;}}for(auto k:fa[u]) dfs1(k);
}
int main()
{cin>>n;cin>>color+1;for(int i=1;i<=n;i++){tri[i]=1;sum[i]=1;}int p;for(int i=1;i<=n-1;i++){cin>>p;fa[p].push_back(i+1);}dfs(1);  //判断是有解并且将每个根节点的权值计算出来if(!flag){cout<<"-1"<<endl;return 0;}dfs1(1);for(int i=1;i<=n;i++)cout<<tri[i];
}

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

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

相关文章

Linux7.9环境源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 2.未安装x264库则先安装配置 可以先查询x264库: whereis libx264 安装编译工具和依赖库&#xff1a; sudo yum install gcc make cmake mercurial git yasm pkgconfig autoconf automake libtool sudo…

DC-DC升压模块变换器微型SIP小体积5v12v15v24v转100V110V150V180V200V250V300V500V800VDC

0.2~2W&#xff0c;微型SIP&#xff0c;单/双输出DC/DC变换器 F特征 效率高达88%1000VDC/3000VDC隔离MTBF>2,000,000小时低成本输入5、12、15和24VDC输出100,110,150,180,200,250,300,500,800 VDC 50,55,75,90,100,125,150,250和400 VDC 温度性能-40℃~85℃UL 94V-0封装…

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型

多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型 目录 多维时序 | Matlab实现GRU-MATT门控循环单元融合多头注意力多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 | Matlab实现GRU-MATT门控循环单元融…

AIGC实战——扩散模型(Diffusion Model)

AIGC实战——扩散模型 0. 前言1. 去噪扩散概率模型1.1 Flowers 数据集1.2 正向扩散过程1.3 重参数化技巧1.4 扩散规划1.5 逆向扩散过程 2. U-Net 去噪模型2.1 U-Net 架构2.2 正弦嵌入2.3 ResidualBlock2.4 DownBlocks 和 UpBlocks 3. 训练扩散模型4. 去噪扩散概率模型的采样5. …

2D目标检测正负样本分配集合

一&#xff1a;CenterNet Center point based正负样本分配方式&#xff1a;中心像素分配为当前目标。 如果同类的两个高斯核具有交叠的情况&#xff0c;我们逐元素【像素】的选取最大值。Center point based 正样本分配方式的缺点&#xff1a;如果两个不同的物体完美匹配&…

喜讯!爱基百客荣获“适用于高淀粉果实的ATAC-seq方法”专利

喜讯来啦&#xff01; 爱基百客荣获ATAC-seq的技术专利~ ATAC-seq技术的相关研究很多&#xff0c;特别是在细胞系和动物组织中的应用较广&#xff0c;而植物样本由于存在细胞壁结构&#xff0c;且代谢物质较多&#xff0c;抽核相对困难。因此&#xff0c;限制了该技术的应用。…

Elasticsearch入门-环境安装ES和Kibana

Elasticsearch入门-环境安装ES和Kibana 安装 ES Windows安装Kibana 安装 安装 ES Windows安装 ① 下载压缩包并解压官网链接&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch ② 启动 ES ,切换到bin目录下&#xff0c;点击elasticsearch.bat文件 启动报错&#…

C++ //练习 8.13 重写本节的电话号码程序,从一个命名文件而非cin读取数据。

C Primer&#xff08;第5版&#xff09; 练习 8.13 练习 8.13 重写本节的电话号码程序&#xff0c;从一个命名文件而非cin读取数据。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /***************************************…

Vue.js+SpringBoot开发大学兼职教师管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 学生教师管理3.3 课程管理模块3.4 授课管理模块3.5 课程考勤模块3.6 课程评价模块3.7 课程成绩模块3.8 可视化图表 四、免责说明 一、摘要 1.1 项目介绍 大学兼职教师管理系统&#xff0c;旨…

基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225头盔 获取完整源码源文件已标注的数据集&#xff08;1463张&#xff09;源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通&#xff0c;有偿89yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检…

高效项目计划的关键因素:制定前必须要考虑的事项

制定项目计划前需要考虑哪些因素&#xff1f;项目计划是一份重要的文件&#xff0c;它概述了项目的范围、目标、时间表、资源和预算。它作为项目团队和涉众的路线图&#xff0c;帮助每个人在整个项目生命周期中保持一致。在本文中我们将概述如何制定合理的项目计划。 1、定义项…

恒峰森林应急消防泵:守护绿色生命线的重要装备

随着城市化进程的加快&#xff0c;人们对于生态环境的保护意识日益增强。森林作为地球上重要的生态系统&#xff0c;承担着净化空气、调节气候、保护水源等诸多功能。然而&#xff0c;由于自然灾害和人为因素&#xff0c;森林火灾时有发生&#xff0c;给生态环境带来严重破坏。…

Kotlin多线程

目录 线程的使用 线程的创建 例一&#xff1a;创建线程并输出Hello World Thread对象的用法 start() join() interrupt() 线程安全 原子性 可见性 有序性 线程锁 ReentrantLock ReadWriteLock 线程的使用 Java虚拟机中的多线程可以1:1映射至CPU中&#xff0c;即…

《Docker 简易速速上手小册》第7章 高级容器管理(2024 最新版)

文章目录 7.1 容器监控与日志7.1.1 重点基础知识7.1.2 重点案例&#xff1a;监控 Flask 应用7.1.3 拓展案例 1&#xff1a;使用 ELK Stack 收集和分析日志7.1.4 拓展案例 2&#xff1a;使用集成监控工具 7.2 性能调优与资源限制7.2.1 重点基础知识7.2.2 重点案例&#xff1a;Fl…

【福建游戏业:低调崛起的区域力量】

在前面的文章中&#xff0c;我们已经依次介绍了上海、北京、广州、深圳、成都、杭州等地的游戏行业发展现状。本文要向大家介绍的最后一个地区--福建。 尽管福建省的经济总体实力相对较弱&#xff0c;但近年游戏业焕发出勃勃生机&#xff0c;涌现出几家优秀游戏企业&#xff0c…

airserver2024mac苹果手机电脑投屏工具下载

AirServer的稳定性如磐石般坚固&#xff0c;当提及投屏软件的核心要素时&#xff0c;稳定性无疑是用户最为关心的方面之一。在这方面&#xff0c;AirServer堪称投屏领域的佼佼者&#xff0c;其稳定性表现足以让用户放心依赖。 首先&#xff0c;AirServer采用了先进的投屏技术&…

文件夹批量字符串检索工具

文件夹 文件夹批量字符串检索工具是一种使用于在指定文件夹中批量搜索指定字符串的工具。它可以帮助用户快速找到包含特定字符串的文件&#xff0c;并提供相应的搜索结果。 这种工具通常具有以下功能&#xff1a; 批量搜索&#xff1a;用户可以指定一个文件夹&#xff0c;在该…

HTML(待完善)

typora-copy-images-to: img 前端api: https://www.w3school.com.cn/ 1.前端知识介绍(了解) 4天内容比较细 碎 多。 小结&#xff1a; 前端知识点不需要单独安装特有的软件。只需要浏览器即可。谷歌 、火狐、IE. 网站后台前端网页 2.HTML的概述(了解) 1.HTML应用场景 各大…

ChatRTX安装教程

介于本人一直想将现有的智慧城市的文档结合大模型RAG实现知识库问答助手&#xff0c;借着Chat With RTX的风潮正好将机器人和知识库合二为一&#xff0c;方便以后对众多文件进行查阅。 一、概要 Chat With RTX 是一个 Demo&#xff0c;用来将您自己的资料&#xff08;文档、笔…

事务隔离大揭秘:MySQL中的四种隔离级别解析

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 事务隔离大揭秘&#xff1a;MySQL中的四种隔离级别解析 前言事务概述mysql隔离级别并发问题与隔离级别关系事务隔离级别的配置与设置 前言 在当今数据驱动的世界中&#xff0c;数据库事务的一致性和隔…