【牛客】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://www.rhkb.cn/news/264130.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用GPT进行成像光谱遥感数据处理?

第一&#xff1a;遥感科学 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 第二&#xff1a;ChatGPT ChatGPT可以做什么&#xff1f; ChatGPT演示使用 ChatGPT的未来 第三&#xff1a;prompt 提示词 Prompt技巧&#xff08;大几岁&#xff09; 最好的原则和策…

音视频数字化(数字与模拟-电视)

上一篇文章【音视频数字化(数字与模拟-音频广播)】谈了音频的广播,这次我们聊电视系统,这是音频+视频的采集、传输、接收系统,相对比较复杂。 音频系统的广播是将声音转为电信号,再调制后发射出去,利用“共振”原理,收音机接收后解调,将音频信号还原再推动扬声器,我…

计算机设计大赛 深度学习图像风格迁移 - opencv python

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习图像风格迁移 - opencv python 该项目较为新颖&#xff0c;适合作为竞赛课题…

【Appium UI自动化】pytest运行常见错误解决办法

通过Appium工具录制代码在pycharm上运行报错&#xff1a; 错误一&#xff1a; 1.提示 setup() 方法运行 error failed 解决办法&#xff1a;未创建 init __ 方法&#xff0c;创建一个空的__init.py文件就解决了。 原因&#xff1a; 错误二&#xff1a; 2.运行代码&#xff…

选择 Python IDE(VSCode、Spyder、Visual Studio 2022和 PyCharm)

前言 当选择 Python 开发工具时&#xff0c;你需要考虑自己的需求、偏好和项目类型。下面是对VSCode、Spyder、Visual Studio 2022和 PyCharm的对比推荐总结&#xff1a; 结论 1、如果你专注于“数据科学”&#xff0c;选择SpyDer没错。 内容 Visual Studio Code (VS Code)…

React基础-webpack+creact-react-app创建项目

学习视频&#xff1a;学习视频 2节&#xff1a;webpack工程化创建项目 2.1.webpack工程化工具&#xff1a;vite/rollup/turbopak; 实现组件的合并、压缩、打包等&#xff1b; 代码编译、兼容、校验等&#xff1b; 2.2.React工程化/组件开发 我们可以基于webpack自己去搭建…

【Flutter/Android】运行到安卓手机上一直卡在 Running Gradle task ‘assembleDebug‘... 的终极解决办法

方法步骤简要 查看你的Flutter项目需要什么版本的 Gradle 插件&#xff1a; 下载这个插件&#xff1a; 方法一&#xff1a;浏览器输入&#xff1a;https://services.gradle.org/distributions/gradle-7.6.3-all.zip 方法二&#xff1a;去Gradle官网找对应的版本&#xff1a;h…

网页数据批量采集流程搭建

分享主流电商平台网页数据批量采集&#xff0c;数据采集API接口的相关知识。 电商数据采集是很多运营工作中必不可少的一个环节。有了足够的数据&#xff0c;才能够更好地了解自身的受众群体&#xff0c;并且根据受众的喜好进行有针对性的设计和优化。 数据采集的流程是怎样的…

挑战杯 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE&#xff08;递归特征消除法&#xff09;4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

CSRF靶场实战

DVWA靶场链接&#xff1a;https://pan.baidu.com/s/1eUlPyB-gjiZwI0wsNW_Vkw?pwd0b52 提取码&#xff1a;0b52 DVWA Low 级别打开靶场&#xff0c;修改密码 复制上面的 url&#xff0c;写个简单的 html 文件 <html <body> <a hrefhttp://127.0.0.1/DVWA/vulne…

HTML+CSS+JS:轮播组件

效果演示 一个具有动画效果的卡片元素和一个注册表单&#xff0c;背景为渐变色&#xff0c;整体布局简洁美观。 Code <div class"card" style"--d:-1;"><div class"content"><div class"img"><img src"./i…

第三节:Vben Admin登录对接后端login接口

系列文章目录 第一节&#xff1a;Vben Admin介绍和初次运行 第二节&#xff1a;Vben Admin 登录逻辑梳理和对接后端准备 文章目录 系列文章目录前言一、Flask项目介绍二、使用步骤1.User模型创建2.迁移模型3. Token创建4. 编写蓝图5. 注册蓝图 三. 测试登录总结 前言 上一节&…

Jenkins中权限管理说明(9)

Jenkins版本&#xff1a;2.303.1 默认情况下&#xff0c;Jenkins是不允许注册操作&#xff0c;只有安装时候赋予的管理员账户。 Jenkins Role Authorization 插件 可以通过通配符方式给用户分配角色&#xff0c;即特定的用户只能看到特定前缀的 View 和 Job&#xff0c;所以一…

新的一年,如何优化企业库存管理?

随着社会的发展和经济的不断增长&#xff0c;库存管理成为了企业运营中非常重要的一环。库存作为企业的资产之一&#xff0c;直接影响着企业的盈利能力和竞争优势。因此&#xff0c;对企业库存进行科学的分析和管理&#xff0c;成为了确保企业持续稳定发展的必要手段之一。企业…

新茶饮“卖水人”混战:徳馨、恒鑫,谁能“卷”出新故事?

春节临近&#xff0c;新茶饮品牌将迎来一年中最大的销售旺季。 而作为新茶饮背后的供应商德馨食品于2023年9月30日终止IPO&#xff1b;原料果汁速冻果块制造商田野创新股份有限公司&#xff08;下称“田野股份”&#xff0c;832023.BJ&#xff09;于2023年2月2日在北交所上市&…

WampServer环境下载安装并结合内网穿透实现远程访问管理界面

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

2024 Sora来了!“手机Agent智能体”也来了!

近日&#xff0c;Open AI发布了能够根据文本生成超现实视频的工具Sora&#xff0c;多款震撼视频引爆科技圈刷屏&#xff0c;热度持续发酵占据AI领域话题中心&#xff0c;被认为是AGI实现过程里的重大里程碑事件。新一轮的人工智能浪潮给人类未来的生产和生活方式带来巨大而深远…

数字滚动实现

介绍 vue-countup-v3 插件是一个基于 Vue3 的数字动画插件&#xff0c;用于在网站或应用程序中创建带有数字动画效果的计数器。通过该插件&#xff0c;我们可以轻松地实现数字的递增或递减动画&#xff0c;并自定义其样式和动画效果。该插件可以用于许多场景&#xff0c;例如展…

K8S—集群调度

目录 前言 一 List-Watch 1.1 list-watch概述 1.2 list-watch工作机制 二 集群调度 2.1 调度过程 2.2 Predicate 和 Priorities 的常见算法和优先级选项 2.3 调度方式 三 亲和性 3.1 节点亲和性 3.2 Pod 亲和性 3.3 键值运算关系 3.4 Pod亲和性与反亲和性 3.5 示例…

基于ZYNQ的PCIE高速数据采集卡的设计(三)硬件设计

采集卡硬件设计 3.1 引言 采集卡的硬件设计是实现采集功能的基础&#xff0c;良好的硬件设计可以使采集功能更容 易实现&#xff0c;方便软件开发。本章基于第二章的硬件设计方案来详细介绍采集卡硬件设计。 包括载卡和子卡的芯片的选型、配置和具体电路的设计。载卡和子卡…