题解 | #代理服务器#

代理服务器

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

//土尔逊Torson 编写于2023/05/31
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

//本函数的目的是在使用代理服务器访问需要访问的服务器时要尽可能的使用与要访问的服务器 IP 不同的代理服务器
//如果要访问的服务器的 IP 中没有和代理服务器的 IP 相同的时,返回 0
//如果有相同的时,需要访问的访问服务器的 IP 与代理服务器 IP 的相同的位置不同
//例如本题在牛客网 题号 KY4 代理服务器 题中示例输入 在访问服务器中下标 1、3、4位置的 IP 与 代理服务器的IP相同
//这种情况下贪心算法使用最远相等的位置来减少代理服务器切换 IP 的次数
//为了保证模拟真实性,我们假设要匹配的访问服务器的 IP 可能存在多次相同的 IP
//所以取最远的位置。每次遍历更新最远位置,直到遍历完全。

int getCSST(vector<string>& proxy, vector<string>& server, int m) {
	// getCSS: get Counting Server Switched Times
	// getCSS: 的意思是获得代理器(代理服务器)切换的次数
	int index = 0, count = 0;
	// index: 表示在每一轮循环 server 遍历时的起始记录下标
	while (index < m) {
		int maxn = 0; 
		// maxn: 表示每次循环中 index 从本轮最初位置需要移动到下轮设置起始位置的最大位移距离
		// 开始遍历代理服务器
		for (string ip : proxy) {
			int j = index;
			while (j < m && ip != server[j]) {
				j++;
			}
			maxn = max(maxn, j - index);
		}
		if (maxn == 0) { //如果 maxn = 0 则表示输入数据有误,即 m = 0 所以返回 -1
			return -1;
		}
		count++;
		//如果要访问的服务器中没有和代理服务器 IP 相同的时 count = 1; index = m 所以跳出循环
		index += maxn;
	}
	return count - 1;
}

int main() {
	int n, m;//n 代表代理服务器的数量,m 代表访问服务器的数量
	while (scanf("%d", &n) != EOF) {
		vector<string> proxy(n);
		for (int i = 0; i < n; ++i) {//获得 n 个代理服务器
			cin >> proxy[i];
		}
		scanf("%d", &m);
		vector<string> server(m);
		for (int i = 0; i < m; ++i) {//获得 m 个访问服务器
			cin >> server[i];
		}
		printf("%d", getCSST(proxy, server, m));//输出代理服务器最少切换次数
	}
	system("pause");
	return EXIT_SUCCESS;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:23
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司10个岗位
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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