牛客周赛54

A-清楚姐姐的糖葫芦(模拟)

题意:给定一个字符串,求字符o的个数

分析:模拟即可。

代码:

复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;cin>>s;
    int ans=0;
    for(int i=0;i<s.size();i++){
        if(s[i]=='o')ans++;
    }
    cout<<ans<<endl;
}

B-清楚姐姐买竹鼠(模拟)

题意:a元可以买1只老鼠,b元可以买3只老鼠,至少买x只老鼠需要多少元

分析:先算刚好买x只需要多少钱再算如果只买b元三只的情况

代码:

复制代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
int main()
{
    ll a, b, x;
    cin >> a >> b >> x;
    ll ans = (x / 3) * b + x % 3 * a;
    ans = min(ans, a * x);
    if(x%3!=0)ans = min(ans, (x / 3 + 1) * b);
    cout << ans << "\n";
    return 0;
}

C-竹鼠饲养物语

题意:有n袋饲料,饲料分为m个等级,每次吃相应的等级饲料,可以升级,不可以跳级,问最多可以进行几次有效投喂。

分析:用map记录饲料等级数量,每次饲料的等级是上一次饲料等级加一,每次将饲料等级变成两次饲料的最小值,并记录

代码:`

复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll n,m;cin>>n>>m;ll ans=0;ll a[n+10];
    for(int i=1;i<=n;i++)cin>>a[i];
    sort(a+1,a+n+1);
    map<int,int>mp;
    for(int i=1;i<=n;i++){
        mp[a[i]]++;
    }
    int c=0;
    for(auto &x:mp){
        if(x.first==c+1){
            if(c!=0)
            x.second=min(mp[c],x.second);
        }
        else break;
        ans+=x.second;
        c=x.first;
    }
    cout<<ans<<endl;
}

D-清楚姐姐跳格子(bfs)

题意:有n个格子,刚开始在1,目标是第n个格子,每个格子上有数字ai,每次可以跳ai的正整数因子远,但是不可以跳出边界。问最少几步可以到达n号格子。

分析:用bfs寻找最少步数,用dis【i】记录走到i的最少步数

代码:

复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[1010],dis[1010];ll n;
vector<int>v;
int bfs(int s,int e){
    memset(dis,-1,sizeof(dis));
    queue<int>pru;
    pru.push(s);
    dis[s]=0;
    while(!pru.empty()){
        int x=pru.front();
        pru.pop();
        if(x==e)return dis[x];
        for(int i=min(n,a[x]);i>=1;i--){
            if(a[x]%i==0&&x+i<=n&&dis[x+i]==-1){
                pru.push(x+i);
                dis[x+i]=dis[x]+1;
            }
            if(a[x]%i==0&&x-i>=1&&dis[x-i]==-1){
                pru.push(x-i);
                dis[x-i]=dis[x]+1;
            }
        }
        //cout<<x<<" "<<dis[x]<<endl;
    }
    return -1;
}
​
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    cout<<bfs(1,n)<<endl;
}

E-清楚姐姐的布告规划(dp)

题意:需要在长度为 n 个单位的布告板上张贴至多 n 张布告, 第 i 张布告的长度为 ai个单位, 如果选择第 i 张贴布告时需要满足: 1.第i 张布告必须要覆盖掉布告板的第i个位置 2.不能相互重叠但可以紧贴 求最少的粘贴布条数量

分析:使用动态规划遍历每个布条可以覆盖的位置进行更新 判断dp[n]是否被覆盖,若没有则输出-1

代码:

复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        vector<int>a(n+1);
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        vector<int>dp(n+10,1e9);
        dp[0]=0;
        for(int i=1;i<=n;i++){
            for(int j=max(0,i-a[i]);j<i;j++){
            if(j+a[i]<=n)
                dp[j+a[i]]=min(dp[j+a[i]],dp[j]+1);
            }
        }
        if(dp[n]==1e9)dp[n]=-1;
        cout<<dp[n]<<endl;
    }
}
相关推荐
㓗冽6 小时前
60题之内难题分析
开发语言·c++·算法
大江东去浪淘尽千古风流人物6 小时前
【VLN】VLN仿真与训练三要素 Dataset,Simulators,Benchmarks(2)
深度学习·算法·机器人·概率论·slam
rainbow68896 小时前
C++开源库dxflib解析DXF文件实战
开发语言·c++·开源
John_ToDebug7 小时前
Chromium安全架构深度解析:从悬空指针检测到内存安全防御体系
c++·chrome
静听山水7 小时前
Redis核心数据结构-ZSet
数据结构·redis
D_evil__7 小时前
【Effective Modern C++】第五章 右值引用、移动语义和完美转发:24. 区分万能引用和右值引用
c++
铉铉这波能秀7 小时前
LeetCode Hot100数据结构背景知识之字典(Dictionary)Python2026新版
数据结构·python·算法·leetcode·字典·dictionary
蜡笔小马7 小时前
10.Boost.Geometry R-tree 空间索引详解
开发语言·c++·算法·r-tree
唐梓航-求职中7 小时前
编程-技术-算法-leetcode-288. 单词的唯一缩写
算法·leetcode·c#
仟濹7 小时前
【算法打卡day3 | 2026-02-08 周日 | 算法: BFS】3_卡码网99_计数孤岛_BFS | 4_卡码网100_最大岛屿的面积DFS
算法·深度优先·宽度优先