阿里笔试(2023-08-26)差一点AK = =

1. 小红的中心点(AC)

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

int main() {
    int n;
    cin >> n;
    vector<vector<int>> vec(n, vector<int>(2));
    for (int i = 0; i < n; i++) {
        cin >> vec[i][0];
        cin >> vec[i][1];
    }
    int res = 0;
    for (int i = 0; i < n; i++) {
        int tmp = 0;
        for (int j = 0; j < n; j++) {
            if (j != i) {
                if (vec[j][0] == vec[i][0] && vec[j][1] > vec[i][1]) { // 上边
                    tmp = tmp | 1;
                }
                else if (vec[j][0] == vec[i][0] && vec[j][1] < vec[i][1]) { // 下边
                    tmp = tmp | 2;
                }
                else if (vec[j][1] == vec[i][1] && vec[j][0] < vec[i][0]) { // 左边
                    tmp = tmp | 4;
                }
                else if (vec[j][1] == vec[i][1] && vec[j][0] > vec[i][0]) { // 右边
                    tmp = tmp | 8;
                }

                if (tmp == 15) {
                    res++;
                    break;
                }
            }
        }
    }
    cout << res;
}
// 64 位输出请用 printf("%lld")

2. 小红打字(AC)

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

int main() {
    int n, k;
    cin >> n >> k;
    string str;
    string keys;
    cin >> str >> keys;
    vector<bool> isHave(26);
    for (auto key : keys) {
        isHave[key - 'a'] = true;
    }
    int res = 0;
    int curLen = 0;
    for (int i = 0; i < str.size(); i++) {
        if (isHave[str[i] - 'a'] == true) {
            curLen++;
        }
        else {
            res += curLen * (curLen + 1) / 2;
            curLen = 0;
        }
    }
    if (curLen > 0) {
        res += curLen * (curLen + 1) / 2;
    }
    cout << res;
}
// 64 位输出请用 printf("%lld")

3. 字符串的不和谐度(A了60%,超时,不知道要怎么优化,欢迎佬指出)

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

int main() {
    int n, q;
    cin >> n >> q;
    string str;
    cin >> str;
    int l, r;
    char ch;

    vector<string> vec = { "abc", "acb", "bac", "bca", "cab", "cba" };

    for (int i = 0; i < q; i++) {
        cin >> l >> r >> ch;
        for (int j = l - 1; j <= r - 1; j++) {
            str[j] = ch;
        }
        int res = 0x3f3f3f3f;
        for (int j = 0; j < vec.size(); j++) {
            int curRes = 0;
            for (int k = 0; k < n; k++) {
                if (str[k] != vec[j][k % 3]) {
                    curRes++;
                }
            }
            res = min(res, curRes);
        }
        cout << res << "\n";
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论
哥们第二题不会溢出吗
点赞 回复 分享
发布于 2023-08-26 20:48 四川
第二题的子串原来不用判重的呀
1 回复 分享
发布于 2023-08-26 20:50 广东
有个O(1)优化思路可以看我帖子,对于区间内部可以直接乘三分之二得到
点赞 回复 分享
发布于 2023-08-26 20:44 江苏
大佬啥岗位
点赞 回复 分享
发布于 2023-08-26 20:55 陕西

相关推荐

01-21 12:26
暨南大学 golang
点赞 评论 收藏
分享
评论
4
6
分享

创作者周榜

更多
牛客网
牛客企业服务