【笔试强训】Day2 --- 牛牛的快递 + 最小花费爬楼梯 + 数组中两个字符串的最小距离

文章目录

    • [1. 牛牛的快递](#1. 牛牛的快递)
    • [2. 最小花费爬楼梯](#2. 最小花费爬楼梯)
    • [3. 数组中两个字符串的最小距离](#3. 数组中两个字符串的最小距离)

1. 牛牛的快递

【链接】:牛牛的快递

解题思路:简单模拟题,主要是处理⼀下输⼊的问题。

cpp 复制代码
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double a;
    char b;
    cin>>a>>b;

    int sum = 0;
    if(b == 'y') sum += 5;
    if(a <= 1)
    {
        sum += 20;
    }
    else 
    {
        sum += 20;
        // a -= 1;
        // sum += ceil(a); // 向上取整函数ceil
        double c = a - 1;
        if(c - (int)c > 0) sum += (int)c + 1;
        else sum += (int)c;
    }
    cout<<sum<<endl;
    return 0;
}

// #include <iostream>
// using namespace std;

// int main() {
//     double a;
//     char b;
//     cin>>a>>b;
//     int sum = 0;
//     if(b == 'y') sum += 5;
//     sum += 20;
//     a -= 1;
//     while(a > 0)
//     {
//         a--;
//         sum++;
//     }
//     cout<<sum<<endl;
//     return 0;
// }

2. 最小花费爬楼梯

【链接】:最小花费爬楼梯

解题思路:动态规划,简单线性 dp。

cpp 复制代码
#include <iostream>
#include <vector>
using namespace std;

const int N = 1e5 + 10;

int cost[N];
int dp[N]; // dp[i]表示:爬到下标为i的台阶需要的最小费用

int main() {
    int n;
    cin >> n;
    for(int i = 0;i < n;i++)
        cin >> cost[i];

    for(int i = 2;i <= n;i++)
        dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

    cout << dp[n] << endl;
    return 0;
}

3. 数组中两个字符串的最小距离

【链接】:数组中两个字符串的最小距离

解题思路 :模拟 + 贪心:

◦ ⽤ prev1 标记 i 位置之前最近⼀次出现的第⼀个字符串的下标;

◦ ⽤ prev2 标记 i 位置之前最近⼀次出现的第⼆个字符串的下标。

cpp 复制代码
#include <iostream>
#include <string>
#include <climits>
using namespace std;

int main()
{
    int n;
    string s1, s2, s;

    cin>>n;
    cin>>s1>>s2;

    int prev1 = -1,prev2 = -1,ret = 0x3f3f3f3f;
    for(int i = 0;i < n;i++){
        cin >> s;
        if(s == s1) // 去找前面最近的s2
        {
            if(prev2 != -1)
                ret = min(ret, i - prev2);
            prev1 = i;
        }
        else if(s == s2) // 去找前面最近的s1
        {
            if(prev1 != -1)
                ret = min(ret, i - prev1);
            prev2 = i;
        }
    }
    //if(ret == 0x3f3f3f3f) cout<<-1<<endl;
    if(prev1 == -1 || prev2 == -1) cout<<-1<<endl;
    else cout<<ret<<endl;
    return 0;
}

相关推荐
恒者走天下21 分钟前
c++学习方向选择说明
开发语言·c++·学习
zhangpeng45554794024 分钟前
C++编程起步项目
开发语言·前端·c++
AI+程序员在路上39 分钟前
C及C++的音频库与视频库介绍
c语言·c++·音视频
feiyangqingyun1 小时前
Qt/C++编写音视频实时通话程序/画中画/设备热插拔/支持本地摄像头和桌面
c++·qt·音视频
KeithTsui1 小时前
C语言之 比特(bit)、字节(Byte)、字(Word)、整数(Int)
linux·c语言·开发语言·c++·算法·word
CodeWithMe2 小时前
【C/C++】现代C++线程池:从入门到生产级实现
c++
lsnm2 小时前
【LINUX操作系统】生产者消费者模型(下):封装、信号量与环形队列
linux·运维·服务器·开发语言·c++·ubuntu·centos
laimaxgg3 小时前
五、central cache的设计
c++·缓存·性能优化
虾球xz4 小时前
游戏引擎学习第289天:将视觉表现与实体类型解耦
c++·学习·游戏引擎
liuzhangfeiabc4 小时前
[luogu12542] [APIO2025] 排列游戏 - 交互 - 博弈 - 分类讨论 - 构造
c++·算法·题解