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;
} 





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

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
码农索隆:以下是我以我微薄的认知提供的建议: 1.考个教师资格证,去当体育考试。 2.去健身房当健身教练(因为在我印象里面体育生身材都不错)。
点赞 评论 收藏
分享
评论
3
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务