笔试强训:Day6

news2025/7/24 10:18:57

一、小红的口罩(贪心+优先级队列)

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

 

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int n,k;
int main(){
    //用一个小根堆  每次使用不舒适度最小的
    cin>>n>>k;
    int x;
    priority_queue<int,vector<int>,greater<int>> heap;
    for(int i=0;i<n;++i){
        cin>>x;
        heap.push(x);
    }
    //开始循环
    int sum=0,ret=0;
    while(sum<=k){
        int t=heap.top();
        heap.pop();
        sum+=t;
        heap.push(t*2);
        ++ret;
    }
    cout<<ret-1<<endl;
}

二、*春游(分类讨论+数学)

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

#include<iostream>
#include<cmath>
using namespace std;
typedef long long LL;
LL t,n,a,b;
LL func(){
    if(n<=2) return min(a,b);//做便宜的船
    if(a>=b) return (LL)ceil(n/3.0)*b;
    LL ret=0;
    if(a*3<b*2){//说明双人船便宜 尽量选择双人船
        ret+=n/2*a;
        if(n%2==1) ret+=min(a,b-a);//多1个人 看看是要直接租双人 还是退掉一个双人租三人
    }
    else{//说明要尽可能租三人船  b*2<=a*3 有可能b更便宜
        ret+=n/3*b;
        //此时可能剩1个人或者2个人
        n%=3;
        if(n==1) ret+=min(a,2*a-b);
        if(n==2) ret+=a;
    }
    return ret;
}
int main(){
    cin>>t;
    while(t--){
        cin>>n>>a>>b;
        cout<<func()<<endl;
    }
}

三、数位染色(01背包)

数位染色_牛客题霸_牛客网

#include <iostream>
using namespace std;
const int N=20,M=10*9;//记录所有数位
bool dp[M];//前i个数选 和恰好为target
int arr[N];//标记各个数位
long long x;
int n=0;//统计有多少位
int sum=0;//统计总和
bool func(){
    if(sum%2==1) return false;
    sum/=2;
    dp[0]=true;
    for(int i=0;i<n;++i)
      for(int j=sum;j>=arr[i];--j)
        dp[j]=dp[j]||dp[j-arr[i]];
    return dp[sum]; 
}
int main() {
    cin>>x;
    while(x){
       arr[n++]=x%10;
       sum+=x%10;
       x/=10;
    }
    if(func()) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
}

 四、素数回文(数学+模拟)

素数回文_牛客题霸_牛客网

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

string s;
bool isprim(long long 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;
   s.reserve(s.size()*2);
   for(int i=s.size()-2;i>=0;--i) s+=s[i];
   if(isprim(stoll(s))) cout<<"prime"<<endl;
   else cout<<"noprime"<<endl;
}

五、活动安排(左区间端点排序+贪心)

活动安排_牛客题霸_牛客网

#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
const int N=2e5+1;
int n;
PII arr[N];
int main() {
   cin>>n;
   for(int i=0;i<n;++i) cin>>arr[i].first>>arr[i].second;
   sort(arr,arr+n);
   int ret=0,right=arr[0].second;
   for(int i=1;i<n;++i) 
   //如果有重叠 保留右侧最小的
      if(arr[i].first<right) right=min(right,arr[i].second);
      else{//如果没有重叠 就更新一下 然后++ret
         ++ret;
         right=arr[i].second;
      }
    cout<<ret+1<<endl;
}

六、**合唱团(多维状态dp)

合唱团_牛客题霸_牛客网

#include <iostream>
using namespace std;
typedef long long LL;
const int N=55,M=15;
const LL INF=0x3f3f3f3f3f3f3f3f;
int n,k,d;
LL arr[N],f[N][M],g[N][M]; //N和n有关系 M和k有关系
//该题的动归需要限制i位置必须选  因为有限制条件d
//f[i][j]表示从前i个挑选j个 且i位置必须选 的最大乘积
//g[i][j]表示从前i个挑选j个 且i位置必须选 的最小乘积
int main() {
    cin>>n;
    for(int i=1;i<=n;++i) cin>>arr[i];
    cin>>k>>d;
    for(int i=1;i<=n;++i){//填写每一行
       f[i][1]=g[i][1]=arr[i];
       for(int j=2;j<=min(k,i);++j){
          f[i][j]=-INF;
          g[i][j]=INF;
          for(int prev=max(i-d,j-1);prev<=i-1;++prev){
            f[i][j]=max(max(f[prev][j-1]*arr[i],g[prev][j-1]*arr[i]),f[i][j]);
            g[i][j]=min(min(f[prev][j-1]*arr[i],g[prev][j-1]*arr[i]),g[i][j]);
          }
       }
    }
    LL ret=-INF;
    for(int i=k;i<=n;++i) ret=max(ret,f[i][k]);
    cout<<ret<<endl;
}

七、*青蛙跳台阶问题(规律)

跳台阶扩展问题_牛客题霸_牛客网

#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    cout<<(1<<(n-1))<<endl;
}

 八、包含不超过两种字符的最长子串(滑动窗口)

包含不超过两种字符的最长子串_牛客题霸_牛客网

#include <iostream>
#include <string>
using namespace std;
string s;
int main() {
    cin>>s;
    int n=s.size();
    int kinds=0;//记录种类
    int hash[26]={0};
    int ret=2;
    for(int left=0,right=0;right<n;++right){
        if(hash[s[right]-'a']++==0) ++kinds;
        while(kinds>2) 
           if(--hash[s[left++]-'a']==0) --kinds;
        ret=max(ret,right-left+1);
    }
    cout<<ret<<endl;
}

九、字符串的排列(排序+dfs)

字符串的排列_牛客题霸_牛客网

class Solution {
  public:
    vector<string> ret;
    string path;
    bool check[10] = {0};
    void dfs(string s) {
        if (path.size() == s.size()) {
            ret.emplace_back(path);
            return;
        }
        for (int i = 0; i < s.size(); ++i) {
            if(check[i]||i>0&&s[i-1]==s[i]&&!check[i-1])  continue;//但是前面的数没选
            path.push_back(s[i]);
            check[i] = true;
            dfs(s);
            path.pop_back();
            check[i] = false;

        }
    }
    vector<string> Permutation(string str) {
        if (str.empty()) return {};
        //要去重 所以排序一下
        sort(str.begin(), str.end());//保证相同的放在一起
        dfs(str);
        return ret;
    }
};

 十、[NOIP2008]ISBN号码(模拟)

[NOIP2008]ISBN号码_牛客题霸_牛客网

#include <iostream>
#include <string>
#include <cctype>
using namespace std;
string s;
int main() {
    cin>>s;
    int n=s.size();
    int sum=0;
    int count=1;//乘数
    for(int i=0;i<n-2;++i)
       if(isdigit(s[i])) sum+=(s[i]-'0')*count++;
    sum%=11;
    if(sum==s[n-1]-'0'||sum==10&&s[n-1]=='X')cout<<"Right"<<endl;
    else{
        s[n-1]=sum==10?'X':sum+'0';
        cout<<s<<endl;
    }
}

十一、kotori和迷宫(单源最短路bfs)

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

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N=32;
int n,m;
int x1,y1;//起点位置
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
char arr[N][N];//迷宫
int dis[N][N];//不仅标记是否搜索过,也标记最短距离
queue<pair<int,int>> q;//用来BFS
//单源最短路问题
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j){
            cin>>arr[i][j];
            if(arr[i][j]=='k') x1=i,y1=j;
        }
    memset(dis,-1,sizeof dis);//表示没搜索过
    //开始进行最短路问题
    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&&dis[x][y]==-1&&arr[x][y]!='*'){
                dis[x][y]=dis[a][b]+1;
                if(arr[x][y]!='e') q.emplace(x,y);
            }
        }
    }
    //搜索结束  我们就开始遍历dis找最近出口步数 和可到达的出口
    int count=0,ret=0x3f3f3f3f;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            if(arr[i][j]=='e'&&dis[i][j]!=-1){
                ++count;
                ret=min(ret,dis[i][j]);
            }
    if(count==0) cout<<-1<<endl;
    else cout<<count<<" "<<ret<<endl;
}

十二、矩阵最长递增路径(dfs+记忆化)

矩阵最长递增路径_牛客题霸_牛客网

    int m,n;
    int memo[1010][1010]={0};
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};
    int dfs(vector<vector<int>>& matrix,int i,int j){
       if(memo[i][j]) return memo[i][j];
       int len=1;
       for(int k=0;k<4;++k){
        int x=dx[k]+i,y=dy[k]+j;
        if(x>=0&&x<m&&y>=0&&y<n&&matrix[x][y]>matrix[i][j]) 
           len=max(len,1+dfs(matrix,x,y));
       }
       return memo[i][j]=len;
    }
    int solve(vector<vector<int>>& matrix) {
       m=matrix.size(),n=matrix[0].size();
       int ret=1;
       for(int i=0;i<m;++i)
         for(int j=0;j<n;++j)
            ret=max(ret,dfs(matrix,i,j));
        return ret;
    }
};

十三、奇数位丢弃(找规律)

奇数位丢弃_牛客题霸_牛客网

#include <iostream>
using namespace std;

int main() {
   int n;
   while(cin>>n){
     int ret=1;
     while(ret-1<=n) ret*=2;
     cout<<ret/2-1<<endl;
   }
}

十四、*求和(dfs)

求和__牛客网

该题没有顺序问题,所以可以用选or不选做 

#include <iostream>
using namespace std;
bool vis[11];//标记数组
int n,m;
int sum;//统计已选数字的总和
void dfs(int pos){
    if(sum==m){
       for(int i=1;i<=n;++i)
         if(vis[i]) cout<<i<<" ";
       cout<<endl;
       return;
    }
    if(sum>m||pos>n) return;//没有意义了
    //选
    sum+=pos;
    vis[pos]=true;
    dfs(pos+1);
    sum-=pos;
    vis[pos]=false;
    dfs(pos+1);//不选
}   
int main() {
   cin>>n>>m;
   dfs(1);//dfs枚举位置
}

 以选几个作为决策

#include <iostream>
using namespace std;
bool vis[11];//标记数组
int n,m;
int sum;//统计已选数字的总和
void dfs(int pos){
    if(sum==m){
       for(int i=1;i<=n;++i)
         if(vis[i]) cout<<i<<" ";
       cout<<endl;
       return;
    }
    if(sum>m) return;//没有意义了
    for(int i=pos;i<=n;++i){
        sum+=i;
        vis[i]=true;
        dfs(i+1);
        vis[i]=false;
        sum-=i;
    }
}   
int main() {
   cin>>n>>m;
   dfs(1);//dfs枚举位置
}

十五、计算字符串的编辑距离(双数组dp问题)

计算字符串的编辑距离_牛客题霸_牛客网

#include <iostream>
#include <string>
using namespace std;
const int N=1010;
int dp[N][N];
string a,b;
int main() {
   //dp[i][j]表示以0-i的A串 变成0-j的B串所需要的最小操作次数
   cin>>a>>b;
   int m=a.size(),n=b.size();
   a=' '+a,b=' '+b;//为了同步下标
   dp[0][0]=0;//都是空串
   for(int i=1;i<=m;++i) dp[i][0]=i;
   for(int j=1;j<=n;++j) dp[0][j]=j;
   for(int i=1;i<=m;++i)
     for(int j=1;j<=n;++j)
       if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1];
       else dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
    cout<<dp[m][n]<<endl;
}

十六、提取不重复的整数(模拟)

提取不重复的整数_牛客题霸_牛客网

#include <iostream>
using namespace std;
string s;
int main() {
    bool hash[10]={0};
    cin>>s;
    for(int i=s.size()-1;i>=0;--i){
        int x=s[i]-'0';
        if(!hash[x]){
            cout<<x;
            hash[x]=true;
        }
    }
}

十七、**【模板】哈夫曼编码

【模板】哈夫曼编码_牛客题霸_牛客网

#include <iostream>
#include <queue>
using namespace std;
typedef long long LL;
int n;
int main() {
    cin>>n;
    priority_queue<LL,vector<LL>,greater<LL>> heap;
    LL x;
    while(n--){
        cin>>x;
        heap.push(x);
    }
    LL ret=0;
    while(heap.size()>1){
        LL t1=heap.top();
        heap.pop();
        LL t2=heap.top();
        heap.pop();
        ret+=t1+t2;
        heap.push(t1+t2);
    }
    cout<<ret<<endl;
}

十八、**abb(多状态dp)

abb_牛客题霸_牛客网

#include <iostream>
using namespace std;
const int N=1e5+10;
typedef long long LL;
char s[N];
LL f[26],g[26];
//f[]表示以i位置为结尾时有多少个_x
//g[]表示以i位置为结尾时有多少个x
int n;
int main() {
    cin>>n>>s;
    LL ret=0;
    for(int i=0;i<n;++i){
        int x=s[i]-'a';
        ret+=f[x];
        f[x]+=i-g[x];
        g[x]+=1;
    }
    cout<<ret<<endl;
}

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

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

相关文章

谷歌Stitch:AI赋能UI设计,免费高效新利器

在AI技术日新月异的今天&#xff0c;各大科技巨头都在不断刷新我们对智能工具的认知。最近&#xff0c;谷歌在其年度I/O开发者大会期间&#xff0c;除了那些聚光灯下的重磅发布&#xff0c;还悄然上线了一款令人惊喜的AI工具——Stitch。这是一款全新的、完全免费的AI驱动UI&am…

运营商地址和ip属地一样吗?怎么样更改ip属地地址

‌在互联网时代&#xff0c;IP属地和运营商地址是两个经常被提及的概念&#xff0c;但它们是否相同&#xff1f;如何更改IP属地地址&#xff1f;这些问题困扰着许多网民。本文将深入探讨这两个概念的区别&#xff0c;并详细介绍更改IP属地地址的方法。 一、运营商地址和IP属地一…

在QT中,利用charts库绘制FFT图形

第1章 添加charts库 1.1 .pro工程添加chart库 1.1.1 在.pro工程里面添加charts库 1.1.2 在需要使用的地方添加这两个库函数&#xff0c;顺序一点不要搞错&#xff0c;先添加.pro&#xff0c;否则编译器会找不到这两个.h文件。 第2章 Charts关键绘图函数 2.1 QChart 类 QChart 是…

流媒体协议分析:流媒体传输的基石

在流媒体传输过程中&#xff0c;协议的选择至关重要&#xff0c;它决定了数据如何封装、传输和解析&#xff0c;直接影响着视频的播放质量和用户体验。本文将深入分析几种常见的流媒体传输协议&#xff0c;探讨它们的特点、应用场景及优缺点。 协议分类概述 流媒体传输协议根据…

vscode中让文件夹一直保持展开不折叠

vscode中让文件夹一直保持展开不折叠 问题 很多小伙伴使用vscode发现空文件夹会折叠显示, 让人看起来非常难受, 如下图 解决办法 首先打开设置->setting, 搜索compact Folders, 去掉勾选即可, 如下图所示 效果如下 看起来非常爽 ! ! !

JAVA-springboot整合Mybatis

SpringBoot从入门到精通-第15章 MyBatis框架 学习MyBatis心路历程 2022年学习java基础时候&#xff0c;想着怎么使用java代码操作数据库&#xff0c;咨询了项目上开发W同事&#xff0c;没有引用框架&#xff0c;操作数据库很麻烦&#xff0c;就帮我写好多行代码&#xff0c;就…

深度学习pycharm debug

深度学习中&#xff0c;Debug 是定位并解决代码逻辑错误&#xff08;如张量维度不匹配&#xff09;、训练异常&#xff08;如 Loss 波动&#xff09;、数据问题&#xff08;如标签错误&#xff09;的关键手段&#xff0c;通过打印维度、可视化梯度等方法确保模型正常运行、优化…

MicroPython+L298N+ESP32控制电机转速

要使用MicroPython控制L298N电机驱动板来控制电机的转速&#xff0c;你可以通过PWM&#xff08;脉冲宽度调制&#xff09;信号来调节电机速度。L298N是一个双H桥驱动器&#xff0c;可以同时控制两个电机的正反转和速度。 硬件准备&#xff1a; 1. L298N 电机控制板 2. ESP32…

在部署了一台mysql5.7的机器上部署mysql8.0.35

在已部署 MySQL 5.7 的机器上部署 MySQL 8.0.35 的完整指南 在同一台服务器上部署多个 MySQL 版本需要谨慎规划&#xff0c;避免端口冲突和数据混淆。以下是详细的部署步骤&#xff1a; 一、规划配置 端口分配 MySQL 5.7&#xff1a;使用默认端口 3306MySQL 8.0.35&#xff1…

QT入门学习(一)---新建工程与、信号与槽

一: 新建QT项目 二:QT文件构成 2.1 first.pro 项目管理文件&#xff0c;下面来看代码解析 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11TARGET main# The following define makes your compiler emit warnings if you use # any Qt feature …

UE5.4.4+Rider2024.3.7开发环境配置

文章目录 一、UE5安装 安装有两种方式一种的源码编译安装、一种是EPIC安装&#xff0c;推荐后者&#xff0c;只需要注册一个EPIC账号就可以一键安装。 二、C环境安装 1.下载VisualStudioSetup 下载链接如下下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 选择社…

Windows环境下PHP,在PowerShell控制台输出中文乱码

解决方法&#xff1a; 以管理员运行PowerShell , 输入&#xff1a; chcp 65001 重启控制台&#xff1b;然后就正常输出中文&#xff1b;

性能优化 - 理论篇:性能优化的七类技术手段

文章目录 Pre引言性能优化的七类技术手段性能优化策略一览表1. 复用优化2. 计算优化2.1 并行执行2.2 变同步为异步2.3 惰性加载 3. 结果集优化3.1 数据格式与协议选择3.2 字段精简与按需返回3.3 批量处理与分页3.4 索引与位图加速 4. 资源冲突优化4.1 锁的分类与特点4.2 无锁与…

华为IP(7)

端口隔离技术 产生的背景 1.以太交换网络中为了实现报文之间的二层隔离&#xff0c;用户通常将不同的端口加入不同的VLAN&#xff0c;实现二层广播域的隔离。 2.大型网络中&#xff0c;业务需求种类繁多&#xff0c;只通过VLAN实现二层隔离&#xff0c;会浪费有限的VLAN资源…

AIGC与影视制作:技术革命、产业重构与未来图景

文章目录 一、AIGC技术全景&#xff1a;从算法突破到产业赋能1. **技术底座&#xff1a;多模态大模型的进化路径**2. **核心算法&#xff1a;从生成对抗网络到扩散模型的迭代** 二、AIGC在影视制作全流程中的深度应用1. **剧本创作&#xff1a;从“灵感枯竭”到“创意井喷”**2…

Cursor 玩转 腾讯地图 MCP Server

腾讯地图WebService API 服务简介 腾讯地图WebService API 是基于HTTPS/HTTP协议构建的标准化地理数据服务接口。该接口支持跨平台调用&#xff0c;开发者可使用任意客户端、服务器端技术及编程语言&#xff0c;遵循API规范发起HTTPS请求&#xff0c;获取地理信息服务&#xf…

2025年中国电商618年中大促策略分析:存量博弈与生态重构

图片来源&#xff1a;Photo by Samuel Regan-Asante on Unsplash 中国电商行业正经历一场从「增量扩张」到「存量深耕」的深刻转型。 随着网络购物用户规模突破9.74亿、线上消费渗透率逼近30%的临界点&#xff0c;传统流量红利逐渐消退&#xff0c;行业竞争已从「切蛋糕」转向…

Deepseek给出的8255显示例程

#include <stdio.h> #include <conio.h> #include <dos.h>// 定义8255端口地址 (根据原理图译码确定) #define PORT_8255_A 0x8000 // PA端口地址 #define PORT_8255_B 0x8001 // PB端口地址 #define PORT_8255_C 0x8002 // PC端口地址 #define PORT_8255…

智汇云舟携最新无人机2D地图快速重建技术亮相广西国际矿业展览会

5月22至25日&#xff0c;广西国际矿业展览会&#xff08;以下简称 “矿业展”&#xff09;在南宁国际会展中心成功举办。智汇云舟与合作伙伴广西空驭数智信息技术有限公司携无人机 2D地图快速重建技术&#xff0c;以及视频孪生智慧矿山解决方案参会&#xff0c;为矿山行业数字化…

力扣每日一题——连接两棵树后最大目标节点数目 ||

目录 题目链接&#xff1a;3373. 连接两棵树后最大目标节点数目 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法一&#xff1a;​​双树贡献分离法​​ Java写法&#xff1a; C写法&#xff1a; 运行时间 时间复杂度和空间复杂度 总结 题目链接&#xff1a;…