题解 | #代理服务器#

代理服务器

https://www.nowcoder.com/practice/1284469ee94a4762848816a42281a9e0

贪心策略:
量度标准:每次使用一个能够访问最多服务器(按顺序)即在服务器中最晚出现的代理服务器;


#include <iostream>
#include <vector>
using namespace std;
vector<string> agents;
vector<string> severs;
int minChange(vector<string> agents,vector<string> severs,int n,int m){
    vector<bool> flag(n,false);//用来标记代理是否出现在访问序列中
    int res=0;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(agents[j]==severs[i]){//访问的服务器是某个代理服务器
                if(n==1){//若只有一个,则无法完成访问。
                    return -1;
                }
                else{
                    flag[j]=true;//标记该代理
                    bool is_all=true;//作为是否所有代理被标记的标记
                    for(int k=0;k<n;k++){
                        if(flag[k]==false){//存在未被标记的代理
                            is_all=false;
                            break;
                            }
                        }
                    if(is_all==true){//如果全部呗标记就说明刚被标记的是最晚被标记的,此时需要切换下一个最晚被标记的
                        res++;
                        for(int k=0;k<n;k++){
                            flag[k]=false;
                        }
                        flag[j]=true;//若全部被标记,从头开始时,agent[j]仍要保持被标记的状态
                    }
                }
                break;
            }
        }
    }
    return res;
}
int main(){
    int n=0,m=0;
    int res=0;
    string data;//获取输入数据
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>data;
        agents.push_back(data);
    }
    cin>>m;
    for(int i=0;i<m;i++){
        cin>>data;
        severs.push_back(data);
    }
    res=minChange(agents,severs,n,m);
    cout<<res<<endl;
    
}

全部评论

相关推荐

11-04 10:30
已编辑
门头沟学院 研发工程师
开心小狗🐶:“直接说答案”
点赞 评论 收藏
分享
11-13 14:37
门头沟学院 Java
程序员牛肉:是的,我觉得你最先需要的是多接触计算机圈子。我感觉你这个写的太幼稚了,根本没换位思考面试官。 你对实习的描述还是我写了前后端,我写了Restful接口,我用了EChatrs。你这让面试官怎么问你?问你什么是前后端?问你什么是Restful?讲真的兄弟,你这个简历在面试官眼里就是啥也不懂的好学生。所以一定要尽快加入一个圈子跟大家多聊聊,看看正儿八经的简历是怎么写的。 可以看一下我首页的简历怎么写那篇文章来学一下,你这里面的坑点我那篇文章里面都有讲过。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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