笔试强训:Day5

一、笨小猴(哈希+数学)

笨小猴_牛客题霸_牛客网

#include <iostream>
#include <cmath>
using namespace std;
string s;
bool isprime(int x){//试除法if(x==2) return true;if(x<2||x%2==0) return false;int n=sqrt(x);for(int i=3;i<=n;i+=2)if(x%i==0) return false;return true;
}
int main() {cin>>s;int hash[26]={0};//哈希表for(auto&ch:s) ++hash[ch-'a'];int maxn=0,minn=100;for(int i=0;i<26;++i)//找最大值和最小值if(hash[i]){maxn=max(maxn,hash[i]);minn=min(minn,hash[i]);}int x=maxn-minn;if(isprime(x)) {cout<<"Lucky Word"<<endl;cout<<x<<endl;}else {cout<<"No Answer"<<endl;cout<<0<<endl;}}

二、主持人调度(左端点排序)

主持人调度(一)_牛客题霸_牛客网

class Solution {
public:bool hostschedule(vector<vector<int> >& schedule) {sort(schedule.begin(),schedule.end());int n=schedule.size();for(int i=0;i<n-1;++i)if(schedule[i][1]>schedule[i+1][0]) return false;return true;}
};

三、分割等和子集(01背包)

分割等和子集_牛客题霸_牛客网

#include <iostream>
using namespace std;
//从数组中挑选一些数字 是否可以恰好等于sum/2  01背包问题
int n;
const int N=505,M=505*105/2;
int arr[N];
bool dp[M];
int main(){cin>>n;int sum=0;//记录总和for(int i=1;i<=n;++i){cin>>arr[i];sum+=arr[i];}if(sum%2) cout<<"false"<<endl;//不能整除else{sum/=2;dp[0]=true;for(int i=1;i<=n;++i)for(int j=sum;j>=arr[i];--j)dp[j]=dp[j]||dp[j-arr[i]];if(dp[sum]) cout<<"true"<<endl;else cout<<"false"<<endl;}
}

四、小红的ABC(找规律)

登录—专业IT笔试面试备考平台_牛客网

//a b c三个字母 最短的 那么只有可能是2和3
#include<iostream>
#include<string>
using namespace std;
string s;
int main(){cin>>s;int n=s.size();int ret=-1;//没有回文串的情况for(int i=0;i<n-1;++i){if(s[i]==s[i+1]){ret=2;break;}if(i+2<n&&s[i]==s[i+2]) ret=3;}cout<<ret<<endl;
}

五、不相邻取数(状态dp)

不相邻取数_牛客题霸_牛客网

#include <iostream>
using namespace std;
const int N=2e5+10;
int n;
int arr[N],f[N],g[N];//f[i]是选了i位置后的最大  g[i]是没选i位置后的最大
int main() {cin>>n;for(int i=1;i<=n;++i) cin>>arr[i];for(int i=1;i<=n;++i){f[i]=g[i-1]+arr[i];g[i]=max(f[i-1],g[i-1]);}cout<<max(f[n],g[n])<<endl;
}

六、**空调遥控(排序+二分/滑动窗口)

登录—专业IT笔试面试备考平台_牛客网

解法1:排序+二分找区间(左端点+右端点组合)

#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int arr[N];
int n,p;
int main(){cin>>n>>p;for(int i=0;i<n;++i) cin>>arr[i];sort(arr,arr+n);int ret=1;//开始枚举for(int i=arr[0];i<=arr[n-1];++i){//枚举温度int left=0,right=n-1;while(left<right){//begin-2 用左端点区间int mid=left+(right-left)/2;if(arr[mid]<i-p) left=mid+1;else right=mid;}int begin=left;right=n-1;//left可以继续从原来的位置找 重置right就行了while(left<right){//begin-p 用右端点区间int mid=left+(right-left+1)/2;if(arr[mid]<=i+p) left=mid;else right=mid-1;}ret=max(ret,right-begin+1);}cout<<ret<<endl;return 0;
}

解法2:滑动窗口

#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int arr[N];
int n,p;
int main(){cin>>n>>p;p*=2;//差值for(int i=0;i<n;++i) cin>>arr[i];sort(arr,arr+n);//滑动窗口 差值在2*p的最大区间int ret=1;for(int left=0,right=0;right<n;++right){while(arr[right]-arr[left]>p)++left;ret=max(ret,right-left+1);}cout<<ret<<endl;
}

七、kotori和气球(组合数学)

登录—专业IT笔试面试备考平台_牛客网

#include<iostream>
using namespace std;
const int mod=109;
int n,m;
int main(){cin>>n>>m;//n与m个(n-1)的乘积int ret=n;for(int i=0;i<m-1;++i) ret=ret*(n-1)%mod;cout<<ret<<endl;
}

八、 *走迷宫(单源最短路BFS)

走迷宫_牛客题霸_牛客网

 单源最短路问题:

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int N=1010;
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int n,m,x1,x2,y1,y2;
char arr[N][N];
int dis[N][N];//不仅用来看看搜索过了没 
//单源最短路问题 用bfs扩展
int bfs(){//-1表示走不到if(arr[x2][y2]=='*') return -1;memset(dis, -1, sizeof dis); // 表⽰还没开始搜索queue<pair<int,int>> q;q.emplace(x1,y1);dis[x1][y1]=0;while(!q.empty()){auto[a,b]=q.front();q.pop();for(int k=0;k<4;++k){int x=dx[k]+a,y=dy[k]+b;if(x>=1&&x<=n&&y>=1&&y<=m&&arr[x][y]=='.'&&dis[x][y]==-1){q.emplace(x,y);dis[x][y]=dis[a][b]+1;if(x==x2&&y==y2) return dis[x][y];}}}return -1;
}
int main() {cin>>n>>m>>x1>>y1>>x2>>y2;for(int i=1;i<=n;++i)for(int j=1;j<=m;++j) cin>>arr[i][j];cout<<bfs()<<endl;
}

1、读取定长字符串也可以按照字符一个个读取

2、单源最短路的标记数组不仅可以记录距离,也可以用来标记是否搜索过

3、memset用来标记-1 

九、**主持人调度2(贪心+优先级队列+左端点排序)

主持人调度(二)_牛客题霸_牛客网

 解法1:贪心+优先级队列+左端点排序

class Solution {
public:int minmumNumberOfHost(int n, vector<vector<int>>& startEnd) {sort(startEnd.begin(),startEnd.end());priority_queue<int,vector<int>,greater<int>> heap;//创建一个小根堆heap.push(startEnd[0][1]);for(int i=1;i<n;++i){int a=startEnd[i][0],b=startEnd[i][1];if(a>=heap.top()) heap.pop(); //说明没有重叠heap.push(b);}return heap.size();}
};

 解法2:分别排序+遍历比较

class Solution {
public:int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {vector<int> start;vector<int> end;//分别得到活动起始时间for(int i = 0; i < n; i++){start.push_back(startEnd[i][0]);end.push_back(startEnd[i][1]);}//分别对开始和结束时间排序sort(start.begin(), start.end());sort(end.begin(), end.end());int res = 0;int j = 0;//遍历结束时间for(int i = 0; i < n; i++)//新开始的节目大于上一轮结束的时间,主持人不变if(start[i] >= end[j])  j++;  else res++;  //主持人增加return res;}
};

十、游游的重组偶数(数学)

游游的重组偶数__牛客网

#include <iostream>
#include <string>
using namespace std;
//把每个数字中为偶数的部分放到最后就可以了
int q;
string s;
int main() {cin>>q;while(q--){cin>>s;int n=s.size();int i=n-1;for(;i>=0;--i)if(s[i]%2==0){swap(s[i],s[n-1]);break;}if(i!=-1) cout<<s<<endl;else cout<<-1<<endl;}
}

十一、**体操队形(枚举+dfs)

登录—专业IT笔试面试备考平台_牛客网

#include<iostream>
using namespace std;
int n;
int ret=0;//统计最终结果
const int N=11;
int arr[N];
bool vis[N];//队员
void dfs(int pos){if(pos==n+1){++ret;return;}//说明找到了一种合法方案//开始一个个位置去选择for(int i=1;i<=n;++i){if(vis[i]) continue;//如果该位置的人选过了 就跳过//我不可能排在我想排的人前面 那后面再怎么选都是错的if(vis[arr[i]]) return;vis[i]=true;dfs(pos+1);vis[i]=false;}
}
int main(){cin>>n;for(int i=1;i<=n;++i) cin>>arr[i];dfs(1);//从第一个位置开始选cout<<ret<<endl;
}

十二、**二叉树中的最大路径和(dfs+树形dp思想)

二叉树中的最大路径和_牛客题霸_牛客网

 

class Solution {
public:int ret=-1010;//统计最大值int maxPathSum(TreeNode* root) {dfs(root);return ret;}int dfs(TreeNode* root){if(root==nullptr) return 0;int left=max(dfs(root->left),0);//最大左子链int right=max(dfs(root->right),0);//最大右子链ret=max(ret,left+right+root->val);//经过root的最大路径return root->val+max(left,right);//给上层返回单链的信息}
};

十三、*排序子序列(模拟+贪心)

排序子序列_牛客笔试题_牛客网

 

#include <iostream>
using namespace std;
int n;
const int N=1e5+10;
int arr[N];
int main() {cin>>n;for(int i=0;i<n;++i) cin>>arr[i];int ret=0,i=0;while(i<n){if(i==n-1){//这个时候不存在后面的数比了 所以自己就是一个子序列++ret;break;}if(arr[i+1]>arr[i]){//搞一个上升的子序列while(i+1<n&&arr[i+1]>=arr[i]) ++i;++ret;}else if(arr[i+1]<arr[i]){//说明搞一个下降的子序列while(i+1<n&&arr[i+1]<=arr[i]) ++i;++ret;}else  while(i+1<n&&arr[i+1]==arr[i]) ++i;++i;}cout<<ret<<endl;
}

十四、消减整数(贪心+数学)

登录—专业IT笔试面试备考平台_牛客网

#include<iostream>
using namespace std;
//得确保 正好a*2==cur 才可以翻倍
int t,h;
int main(){cin>>t;while(t--){cin>>h;int a=1,ret=0;while(h){h-=a;++ret;if(h%(a*2)==0) a*=2;}cout<<ret<<endl;}
}

十五、最长上升子序列2(贪心+二分)

最长上升子序列(二)_牛客题霸_牛客网

 

class Solution {
public:int LIS(vector<int>&nums) {int n=nums.size();if(n<=1) return n;//至少有两个元素vector<int> v;//用来当数组v.emplace_back(nums[0]);for(int i=1;i<n;++i){int x=nums[i];//如果比后面的大 就直接插入if(x>v.back()) v.emplace_back(nums[i]);else if(x==v.back()) continue;else{//二分查找插入的位置int left=0,right=v.size()-1;while(left<right){int mid=left+(right-left)/2;if(v[mid]<x) left=mid+1;else right=mid;}v[left]=x;}} return v.size();}
};

十六、爱吃素(数学)

登录—专业IT笔试面试备考平台_牛客网

#include<iostream>
#include<cmath>
using namespace std;
int t;
typedef long long LL;
LL a,b;
bool isprim(LL x){if(x==2) return true;if(x<2||x%2==0) return false;int n=sqrt(x);for(int i=3;i<=n;i+=2)if(x%i==0) return false;return true;
}
int main(){cin>>t;while(t--){cin>>a>>b;if((a==1&&isprim(b))||(b==1&&isprim(a))) cout<<"YES"<<endl;else cout<<"NO"<<endl;}
}

十七、相差不超过k的最多数(排序+滑动窗口)

相差不超过k的最多数_牛客题霸_牛客网

#include <iostream>
#include <algorithm>
using namespace std;
int n,k;
const int N=2e5+1;
int arr[N];
int main() {cin>>n>>k;for(int i=0;i<n;++i) cin>>arr[i];sort(arr,arr+n);int ret=1;for(int left=0,right=0;right<n;++right){while(arr[right]-arr[left]>k) ++left;ret=max(right-left+1,ret);}cout<<ret<<endl;
}

十八、最长公共子序列1(LCSdp)

最长公共子序列(一)_牛客题霸_牛客网

 

#include <iostream>
using namespace std;
const int N=1010;
char s1[N],s2[N];
int dp[N][N];
int n,m;
int main() {//dp[i][j]表示以0-i的字符串1中 与0-j字符串2中 的最长公共子序列长度cin>>n>>m;for(int i=1;i<=n;++i) cin>>s1[i];for(int i=1;i<=m;++i) cin>>s2[i];//开始进行dpfor(int i=1;i<=n;++i)for(int j=1;j<=m;++j)if(s1[i]==s2[j]) dp[i][j]=dp[i-1][j-1]+1;else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);cout<<dp[n][m]<<endl;
}

 

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

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

相关文章

掌握 LangChain 文档处理核心:Document Loaders 与 Text Splitters 全解析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是LangChain 2、LangChain 在智能应用中的作用 …

开发工具指南

后端运维场用工具 工具文档简介1panel安装指南运维管理面板网盘功能介绍网盘jenkins可以通过1panel 进行安装jpom辅助安装文档后端项目发布工具

拷贝构造函数如果不加引用会怎样?

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1…

UE5中制作动态数字Decal

在进行城市道路编辑时&#xff0c;经常需要绘制人行道、交通标志、停车线等路面元素。如果能够使用具有动态修改功能的 Decal&#xff08;贴花&#xff09;&#xff0c;将大大提升编辑效率和灵活性。接下来讲解如何制作。 1.首先准备一张包含所需元素的Texture&#xff0c;这里…

【Leetcode 每日一题】2900. 最长相邻不相等子序列 I

问题背景 给你一个下标从 0 0 0 开始的字符串数组 w o r d s words words&#xff0c;和一个下标从 0 0 0 开始的 二进制 数组 g r o u p s groups groups&#xff0c;两个数组长度都是 n n n。 你需要从 w o r d s words words 中选出 最长子序列。如果对于序列中的任何…

ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例

ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例 在当今数字化工业时代&#xff0c;智能仪表与控制系统的互联互通成为提高生产效率和管理水平的关键。横河AXG电磁流量计作为一款高性能的流量测量设备&#xff0c;在多个行业得到了广泛应用。而Profibus DP作为一种…

微软向现实低头:悄悄延长Windows 10的Microsoft 365支持

快科技5月11日消息&#xff0c;Windows 10将在今年10月14日正式结束支持&#xff0c;此前微软曾明确表示&#xff0c;Microsoft 365&#xff08;M365&#xff09;应用&#xff0c;如Outlook、Teams、OneDrive、Word、Excel等&#xff0c;也将随之停止支持。 不过无法升级至Win…

【Spring AI】模型记忆持久化 + 自动加载记忆上下文

当我们利用大模型进行开发时&#xff0c;有时会因为项目重启而丢失模型的记忆&#xff0c;会给开发的过程带来不方便 接下来我将介绍如何将模型的记忆持久化&#xff0c;并保证在项目重启后依然能能够正常加载记忆上下文。 我们在配置ChatClient时&#xff0c;由于想要实现模…

(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)

目录 前言&#xff1a; 源代码&#xff1a; product.h product.c fileio.h fileio.c main.c 代码解析&#xff1a; 一、程序结构概述 二、product.c 函数详解 1. 初始化商品列表 Init_products 2. 添加商品 add_product 3. 显示商品 display_products 4. 修改商品 mo…

[服务器面板对比] 宝塔、aaPanel、Plesk、cPanel 哪家强?功能、性能与价格横评 (2025)

对于很多 Linux 服务器用户来说&#xff0c;直接面对黑乎乎的命令行界面 (CLI) 进行各种操作&#xff0c;虽然强大灵活&#xff0c;但也确实有一定的学习门槛和操作复杂度。特别是当你需要管理多个网站、数据库、FTP账户&#xff0c;或者进行日常的软件安装、安全配置、日志查看…

WebGL图形编程实战【7】:变换流水线 × 坐标系与矩阵精讲

变换流水线 #mermaid-svg-Omabd9LSNCdIvWqB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Omabd9LSNCdIvWqB .error-icon{fill:#552222;}#mermaid-svg-Omabd9LSNCdIvWqB .error-text{fill:#552222;stroke:#552222;…

电力电容器故障利用沃伦森(WARENSEN)工业设备智能运维系统解决方案

行业工况背景 当配电室报警显示“电容器故障”时&#xff0c;管理者可能会感到焦虑。沃伦森&#xff08;WARENSEN&#xff09;凭借十多年的电力补偿设备服务经验&#xff0c;提供了科学的故障应对流程&#xff0c;帮助避免大部分二次损失。 一、五大常见故障现象快速识别 温度…

星海智算云平台部署GPT-SoVITS模型教程

背景 随着 GPT-SoVITS 在 AI 语音合成领域的广泛应用&#xff0c;越来越多的个人和团队开始关注这项前沿技术。你是否也在思考&#xff0c;如何快速、高效地部署并体验这款强大的声音克隆模型&#xff1f;遗憾的是&#xff0c;许多本地部署方案不仅配置复杂&#xff0c;而且对…

高吞吐与低延迟的博弈:Kafka与RabbitMQ数据管道实战指南

摘要 本文全面对比Apache Kafka与RabbitMQ在数据管道中的设计哲学、核心差异及协同方案。结合性能指标、应用场景和企业级实战案例,揭示Kafka在高吞吐流式处理中的优势与RabbitMQ在复杂路由和低延迟传输方面的独特特点;介绍了使用Java生态成熟第三方库(如Apache Kafka Clie…

Python零基础入门到高手8.4节: 元组与列表的区别

目录 8.4.1 不可变数据类型 8.4.2 可变数据类型 8.4.3 元组与列表的区别 8.4.4 今天彩票没中奖 8.4.1 不可变数据类型 不可变数据类型是指不可以对该数据类型进行原地修改&#xff0c;即只读的数据类型。迄今为止学过的不可变数据类型有字符串&#xff0c;元组。 在使用[]…

无人机数据处理与特征提取技术分析!

一、运行逻辑 1. 数据采集与预处理 多传感器融合&#xff1a;集成摄像头、LiDAR、IMU、GPS等传感器&#xff0c;通过硬件时间戳或PPS信号实现数据同步&#xff0c;确保时空一致性。 边缘预处理&#xff1a;在无人机端进行数据压缩&#xff08;如JPEG、H.265&#xff09;…

LeetCode 热题 100 105. 从前序与中序遍历序列构造二叉树

LeetCode 热题 100 | 105. 从前序与中序遍历序列构造二叉树 大家好&#xff0c;今天我们来解决一道经典的二叉树问题——从前序与中序遍历序列构造二叉树。这道题在 LeetCode 上被标记为中等难度&#xff0c;要求根据给定的前序遍历和中序遍历序列&#xff0c;构造并返回二叉树…

CSS- 1.1 css选择器

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 系…

MongoClient和AsyncIOMotorClient的区别和用法

示例代码&#xff1a; from motor.motor_asyncio import AsyncIOMotorClient from pymongo import MongoClient&#x1f50d; 这两个库分别是&#xff1a; 名字说明举个例子pymongo.MongoClient同步版 的 MongoDB 客户端&#xff08;常规阻塞式操作&#xff09;你在主线程里一…

5.15打卡

浙大疏锦行 DAY 26 函数专题1 知识点回顾&#xff1a; 1. 函数的定义 2. 变量作用域&#xff1a;局部变量和全局变量 3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数 4. 传递参数的手段&#xff1a;关键词参数 5. 传递参数的顺序&#xff1a;同时出现三种参数…