更新:
我已经修复了代码,以便我能想出的每个测试用例都给了我正确的结果,但我仍然缺少一些东西,因为在线法官仍然说它是错误的。我在本段之后立即包含了代码。我知道我采取的方法很丑陋而且效率不高,但我不在乎。我现在只想输出正确的答案。
#include <iostream>
#include <map>
#include <string>
#include <queue>
using namespace std;
int main()
{
map<string, string> names;
map<string, int > bossCount;
vector<string> bosses;
string topBoss;
int n;
int max = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
bool add = true;
string c1, c2;
cin >> c1 >> c2;
names[c1] = c2;
for (int i = 0; i < bosses.size(); i++)
{
if (bosses[i] == c2)
add = false;
//bosses.push_back(c2);
}
if (add == true)
bosses.push_back(c2);
}
for (map<string, string>::iterator it = names.begin(); it != names.end(); it++)
for(int i = 0; i < bosses.size(); i++)
{
if (bosses[i] == (*it).second)
{
bossCount[bosses[i]]++;
}
}
for (map<string, string>::iterator it = names.begin(); it != names.end(); it++)
for (int i = 0; i < bosses.size(); i++)
{
if (bosses[i] == (*it).first)
{
bossCount[bosses[i]] = 0;
bossCount[(*it).second]++;
}
}
for (map<string, int>::iterator it = bossCount.begin(); it != bossCount.end(); it++)
{
if((*it).second == max)
{
if ((*it).first < topBoss)
topBoss = (*it).first;
}
if ((*it).second > max)
{
max = (*it).second;
topBoss = (*it).first;
}
}
cout << topBoss;
return 0;
}
我得到了一份他们向其报告的唯一姓名和他们的老板的列表(老板不是唯一的)。然后我必须找出哪个老板的等级最高。这意味着,列表中的几个第一个唯一名称可能有相同的老板,但是那个老板可能有他自己的老板,这意味着第一个唯一的名字回答他们老板的老板,所以老板的老板赢得了等级。这是整个问题:http: //i.imgur.com/nyTgW.png
我已经编写了代码,它适用于问题中提供的示例测试用例(输出拿破仑)。它在我抛出的其他一些测试用例中也有效,但是当我使用这个测试用例时它不起作用,例如:
4
a b
c b
d b
b e
我相信正确的答案应该是“e”,因为“b”的老板是“e”。在这个测试用例中,我的程序输出 b 。有人可以在这里帮助发现问题吗?
#include <iostream>
#include <map>
#include <string>
#include <queue>
using namespace std;
int main()
{
map<string, string> names;
map<string, int > bossCount;
queue<string> next;
vector<string> bosses;
string topBoss;
int n;
int max = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
string c1, c2;
cin >> c1 >> c2;
names[c1] = c2;
bosses.push_back(c2);
}
for (map<string, string>::iterator it = names.begin(); it != names.end(); it++)
for(int i = 0; i < bosses.size(); i++)
{
if (bosses[i] != (*it).first)
{
bossCount[bosses[i]]++;
}
}
for (map<string, int>::iterator it = bossCount.begin(); it != bossCount.end(); it++)
{
if((*it).second == max)
{
if ((*it).first < topBoss)
topBoss = (*it).first;
}
else if ((*it).second > max)
{
max = (*it).second;
topBoss = (*it).first;
}
}
cout << topBoss;
return 0;
}