题解 | #代理服务器#

代理服务器

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

贪心,选择可以每一次使用最久的代理服务器,需要注意区别第一次切换之前和切换之后的区别。第一次切换之后需要选择一个代理服务器作为当前服务器,因此判断条件需要改变。

#include<iostream>
#include<map>

using namespace std;

int main(){
    int n,m;
    while(cin>>n){
        map<string,bool>proxyServer;//定义一个map储存代理服务器和其状态(是否使用)
        for(int i=0;i<n;i++){//读入代理服务器
            string str;
            cin>>str;
            proxyServer.insert(make_pair(str, true));
        }
        int res=0,count=0;//res为切换次数,count用于记录使用过的代理服务器数量,判断是否切换代理服务器
        cin>>m;
        for(int i=0;i<m;i++){//循环读入需要访问的服务器
            string str;
            cin>>str;
            if(proxyServer.count(str)==1&&proxyServer[str]==true){//当前需要访问的服务器为代理服务器,并且此代理服务器在当前循环中未被使用过
                proxyServer[str]=false;
                count++;//使用过的代理服务器数量
            }
            if(count==n){//当所有代理服务器都被使用过
                res++;//切换当前使用的服务器
                for(auto &this:proxyServer){//遍历重置代理服务器状态
                    this.second=true;
                }
                proxyServer[str]=false;//此处与第一轮查找不同,需要标记当前使用的服务器
                count=1;//当前有正在使用的服务器,所以使用过的服务器数量为1
            }
        }
        if(n==1&&res!=0){//代理服务器数量为1,但是需要切换代理服务器,所以不符合条件
            cout<<-1<<endl;
        }
        else{
            cout<<res<<endl;
        }
    }
    return 0;
}
全部评论

相关推荐

08-23 20:17
四川大学 C++
xxxzsfa:技术栈可以参考我这个给写,把知识点写出来起码能让面试官知道你是知道这个点的,不会的知识点可以不写,简历上写了但又答不上来就很尴尬了,可以给技术栈中的知识点和项目中的难点亮点加粗,学历不错,肯定会有大厂面的,刚开始可以先投中小厂练手,拿个offer保底再去面大厂,秋招可以正式和实习一起找,找工作是个需要长期坚持的过程,加油查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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