首页 > B站算法方向笔试
头像
牛客3523209号
编辑于 2020-08-13 20:16
+ 关注

B站算法方向笔试

三道题比较简单直接贴代码吧

1. 判断异形词

int main() {
    string s1, s2;
    getline(cin, s1);
    getline(cin, s2);
    unordered_map<char, int> dict1, dict2;
    for (auto &a : s1) dict1[a]++;
    for (auto &a : s2) dict2[a]++;
    for (auto &a : dict1) {
        if (dict2.count(a.first) && dict2[a.first] == a.second) {
            dict2.erase(a.first);
        } else {
            cout << "0" << endl;
            return 0;
        }
    }
    if (dict2.size() == 0) cout << "1" << endl;
    else cout << "0" << endl;
    return 0;
}

2. 给定数字,有多少种连续质数相加组成(考察:前缀和)

int main() {
    int num, counts = 0;
    cin >> num;
    vector<int> dict;
    vector<ll> sums;
    sums.push_back(0);
    for (int i = 2; i <= num; i++) {
        if (check(i)) {
            dict.push_back(i);
            sums.push_back(sums.back()+i);
        }
    }

    for (int i = 1; i < sums.size(); i++) {
        for (int j = 0; j < i; j++) {
            if (sums[i]-sums[j] == num) counts++;
        }
    }
    cout << counts << endl;
    return 0;
}

3. 0-1背包(不压缩空间只能过40%)

int main() {
    int n, m;
    cin >> n >> m;
    vector<int>times, values;
    for (int i = 0; i < n; i++) {
        int a, b;
        cin >> a >> b;
        times.push_back(a);
        values.push_back(b);
    }
    vector<int> dp(m+1, 0);
    for (int i = 0; i < n; i++) {
        for (int j = m; j >= times[i]; j--) {
            dp[j] = max(dp[j], dp[j-times[i]]+values[i]);
        }
    }
    cout << dp[m] << endl;
    return 0;
}



全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐