题目思路:
首先读入所有的代理服务器,用map<string, bool>存储,代理地址到可否使用的映射关系。然后依次读入需要访问的服务器,读入一个地址后判断是否存在在代理服务中,如果存在,将该地址的代理使用权限标记为false,并判断是否全部的代理都标记false,如果全部都被标记false,那说明,这是离上次变更最远的了,必须进行变更代理服务器了,然后重置代理map,并标记当前的代理为false。
有个测试点需要输出-1,我就直接针对这个点进行了判断,可能还有更好的判断条件,期待回复。(PS:我的判断是代理数量为1,但需要访问它本身)
#include <iostream> #include <string> #include <vector> #include <map> using namespace std; map<string, bool> agent; void reset() { for (auto it = agent.begin(); it != agent.end(); it++) (*it).second = true; } bool all_false() { for (auto it = agent.begin(); it != agent.end(); it++) if ((*it).second == true) return false; return true; } int main() { int n, m; while (cin >> n) { string tmp; for (int i = 0; i < n; i++) { cin >> tmp; agent[tmp] = true; } cin >> m; int cnt = 0; for (int i = 0; i < m; i++) { cin >> tmp; if (agent.count(tmp) == 1) { agent[tmp] = false; if (all_false() == true) { reset(); agent[tmp] = false; cnt++; } } } if (agent.size() == 1 && cnt != 0) cout << -1 << endl; else cout << cnt << endl; } }