9.20 思科笔试 编程题C++

思科真实在,只有一道编程,感觉是笔试中做过的最简单的了

直接模拟,第一遍只过了90%,发现是没考虑m=0的情况,加上就全部通过了
#include<iostream>
#include<vector>
using namespace std;
int find_max(vector<int>& a, vector<int>& visited) {
    int max_index = -1;
    int tmp = -100;
    for (int i = 0; i < a.size(); i++) {
        if (visited[i] > 0)continue;
        if (a[i] > tmp) { tmp = a[i]; max_index = i; }
    }
    return max_index;
}
int main() {
    int n, m;
    cin >> n >> m;
    int x;
    vector<int>a;
    for (int i = 0; i < n; i++)
    {
        cin >> x;
        a.push_back(x);
    }
    vector<int>visited(n, 0); //0-未选,1-被A选,2-被B选
    int count = 0;
    int k = find_max(a, visited); //找到最大元素的下标
    while (k != -1) {
        //A选
        visited[k] = 1;
        //向左右搜索(m=0时不必要)
        if (m > 0) {
            //向左搜索
            count = 0;
            for (int i = k; i >= 0; i--) {
                if (visited[i] == 0) {
                    count++;
                    visited[i] = 1;
                    if (count == m)break;
                }
            }
            //向右搜索 
            count = 0;
            for (int i = k; i < a.size(); i++) {
                if (visited[i] == 0) {
                    count++;
                    visited[i] = 1;
                    if (count == m)break;
                }
            }
        }
        //B选
        k = find_max(a, visited);
        if (k == -1)break;

        visited[k] = 2;

        if (m > 0) {
            count = 0;
            for (int i = k; i >= 0; i--) {
                if (visited[i] == 0) {
                    count++;
                    visited[i] = 2;
                    if (count == m)break;
                }
            }
            count = 0;
            for (int i = k; i < a.size(); i++) {
                if (visited[i] == 0) {
                    count++;
                    visited[i] = 2;
                    if (count == m)break;
                }
            }
        }
        k = find_max(a, visited);  //继续轮到A
    }

    for (int i = 0; i < n; i++) {
        if (visited[i] == 1)cout << 'A';
        if (visited[i] == 2)cout << 'B';
    }
    cout << endl;

    return 0;
} 





全部评论
楼主厉害啊
点赞 回复 分享
发布于 2022-10-09 16:49 山西
可以用java吗
点赞 回复 分享
发布于 2023-06-19 17:39 山东

相关推荐

2024-12-26 17:47
重庆大学 后端
黑皮白袜臭脚体育生:一般需要一业务一轮子两项目,再加一个项目会更好,另外简历条例按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写另外宣传下自己的开源仿b站微服务项目,GitHub已经400star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
2024-12-23 10:55
已编辑
大连理工大学 Java
牛客930504082号:华子综测不好好填会挂的,而且填的时候要偏向牛马选项
点赞 评论 收藏
分享
评论
3
7
分享
牛客网
牛客企业服务