美团笔试题目2(2023-08-19)有点难 = =

1. 小美的外卖订单编号(AC)

#include <iostream>
using namespace std;

int main() {
    int q;
    cin >> q;
    int m, x;
    for (int i = 0; i < q; i++) {
        cin >> m >> x;
        int res = x % m;
        if (res == 0) {
            cout << m << endl;
        }
        else {
            cout << res << endl;
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

2. 小美的加法(AC)

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }
    unsigned long long res = 0;
    for (int i = 0; i < n; i++) {
        res += nums[i];
    }
    long long maxAdd = 0;
    long long tmp;
    for (int i = 0; i < n - 1; i++) {
        tmp = (long long)nums[i] * nums[i + 1] - nums[i] - nums[i + 1];
        if (tmp > maxAdd) {
            maxAdd = tmp;
        }
    }
    if (maxAdd > 0) {
        res += maxAdd;
    }
    cout << res;
    return 0;
}
// 64 位输出请用 printf("%lld")

3. 小美的01串翻转

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

int main() {
    string str;
    cin >> str;
    vector<bool> isChange(str.size());
    int numChange = 0;
    for (int i = 1; i < str.size(); i++) {
        if (str[i] == str[i - 1]) {
            str[i] = str[i] == '0' ? '1' : '0';
            isChange[i] = true;
            numChange++;
        }
    }
    if (numChange > str.size() / 2) {
        numChange = str.size() - numChange;
        for (int i = 0; i < isChange.size(); i++) {
            isChange[i] = isChange[i] == 1 ? 0 : 1;
        }
    }
    vector<int> dp(str.size());
    int res = 0;
    //for (int len = 2; len <= str.size(); len++) {
    //    dp[len-2] = isChange[i] == true ? 1 : 0;
    //    for (int i = 0; i <= str.size() - len; i++) {
    //        dp[i + len - 1] = dp[i + len - 2] + isChange[i + len - 1] == true ? 1 : 0;
    //        res += dp[i + len - 1];
    //    }
    //}
    for (int i = 0; i < str.size() - 1; i++) {
        dp[i] = isChange[i] == true ? 1 : 0;
        for (int len = 2; len <= str.size() - i; len++) {
            dp[i + len - 1] = dp[i + len - 2] + isChange[i + len - 1] == true ? 1 : 0;
            res += dp[i + len - 1];
        }
    }
    cout << res;
    return 0;
}
// 64 位输出请用 printf("%lld")

4. 小美的数组构造

#include <iostream>
#include <vector>

using namespace std;

void dfs(unsigned long long& res, int sum, vector<int>& numsa, vector<int>& numsb) {
    if (numsb.size() == numsa.size()) {
        if (sum == 0) {
            res += 1;
            if (res > 1000000007) {
                res = res % 1000000007;
            }
        }
        return;
    }
    //if (numsb.size() == numsa.size() - 1) {
    //    if (sum == numsa[numsb.size()]) {
    //        return;
    //    }
    //    else {
    //        numsb.push_back(sum);
    //        dfs(res, sum - sum, numsa, numsb);
    //        numsb.pop_back();
    //    }
    //}
    for (int i = 1; i <= sum - (numsa.size() - (numsb.size() + 1)); i++) {
        if (i == numsa[numsb.size()]) {
            continue;
        }
        else {
            numsb.push_back(i);
            dfs(res, sum - i, numsa, numsb);
            numsb.pop_back();
        }
    }
    return;
}

int main() {
    int n;
    cin >> n;
    vector<int> numsa(n);
    int sum = 0;
    for (int i = 0; i < n; i++) {
        cin >> numsa[i];
        sum += numsa[i];
    }

    unsigned long long res = 0;
    vector<int> numsb;
    dfs(res, sum, numsa, numsb);
    cout << res;
}
// 64 位输出请用 printf("%lld")

5. 小美的数组操作

不会 = =。

全部评论
做不出来题就用大声掩盖过去吧(无慈悲)
2 回复 分享
发布于 2023-08-19 22:30 湖北
请问第四题全过了吗?这题我都没有思路
1 回复 分享
发布于 2023-08-20 11:04 香港
第三题A了么
点赞 回复 分享
发布于 2023-08-19 21:30 天津
114514是吧😆
点赞 回复 分享
发布于 2023-08-19 21:46 广东
大佬,你后面三道题目的代码,都是对的吗
点赞 回复 分享
发布于 2023-08-20 16:59 上海

相关推荐

7 53 评论
分享
牛客网
牛客企业服务