样例对了为什么0分?大佬们能不能帮忙看看?
#include
#include
#include
using namespace::std;
struct role
{
string name;
int s;
string *privilege;
};
struct user
{
string name;
vector privilege;
};
int main()
{
int p, r, u, q;
cin >> p;
string *category = new string[p];
for (int i = 0; i < p; ++i)
cin >> category[i];
cin >> r;
role *roles = new role[r];
for (int i = 0; i < r; ++i)
{
cin >> roles[i].name;
cin >> roles[i].s;
roles[i].privilege = new string[roles[i].s];
for (int j = 0; j < roles[i].s; ++j)
cin >> roles[i].privilege[j];
}
cin >> u;
user *users = new user[u];
for (int i = 0; i < u; ++i)
{
cin >> users[i].name;
int t;
cin >> t;
for (int j = 0; j < t; ++j)
{
string rolename;
cin >> rolename;
for (int l = 0; l < r; ++l)
{
if (rolename == roles[l].name)
{
for (int f = 0; f < roles[l].s; ++f)
{
users[i].privilege.push_back(roles[l].privilege[f]);
}
break;
}
}
}
}
cin >> q;
int *output = new int[q];
for (int i = 0; i < q; ++i)
output[i] = -1;
for (int i = 0; i < q; ++i)
{
string name, pri;
cin >> name >> pri;
for (int j = 0; j < u; ++j)
{
if (name == users[j].name)
{
if (pri.find(':') == -1)
{
for (int l = 0; l < users[j].privilege.size(); ++l)
{
if (users[j].privilege[l].find(pri) != -1)
{
if (users[j].privilege[l].find(':') == -1)
{
output[i] = -2;
break;
}
else if (users[j].privilege[l][users[j].privilege[l].size() - 1] - '0' > output[i])
output[i] = users[j].privilege[l][users[j].privilege[l].size() - 1] - '0';
}
}
}
else
{
int pos = pri.find(':');
for (int l = 0; l < users[j].privilege.size(); ++l)
if (users[j].privilege[l].find(':') != -1)
if (users[j].privilege[l].find(pri.substr(0, pos + 1)) != -1)
if (users[j].privilege[l][users[j].privilege[l].size() - 1] - pri[pri.size() - 1] >= 0)
{
output[i] = -2;
break;
}
}
break;
}
}
}
for (int i = 0; i < q; ++i)
{
if (output[i] == -2)
cout << "ture";
else if (output[i] == -1)
cout << "false";
else
cout << output[i];
cout << endl;
}
}