【笔试强训】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;
}

相关推荐
xu_yule19 分钟前
网络和Linux网络-13(高级IO+多路转接)五种IO模型+select编程
linux·网络·c++·select·i/o
2301_7657031426 分钟前
C++与自动驾驶系统
开发语言·c++·算法
轩情吖29 分钟前
Qt的窗口(三)
c++·qt
热爱编程的小刘39 分钟前
Lesson04---类与对象(下篇)
开发语言·c++·算法
郝学胜-神的一滴1 小时前
Linux网络编程之listen函数:深入解析与应用实践
linux·服务器·开发语言·网络·c++·程序人生
呱呱巨基2 小时前
c语言 文件操作
c语言·开发语言·c++·笔记·学习
小明同学012 小时前
[C++进阶] 深度解析AVLTree
c++·算法·visualstudio
CoderCodingNo2 小时前
【GESP】C++五级练习题 luogu-P1031 [NOIP 2002 提高组] 均分纸牌
开发语言·c++·算法
云小逸3 小时前
【Nmap 设备类型识别技术】整体概况
服务器·c语言·网络·c++·nmap
liu****3 小时前
29.路径类dp
c++·算法·acm