有n个人其中一些人是正直者一些人是欺诈者。正直者说真话欺诈者说假话。你现在已经知道每个人的身份。有q次询问每次询问你需要回答x指证y是正直者还是欺诈者。第一行输入一个正整数n代表人数第二行输入一个长度为n的字符串第i个字符为H代表第i个人是正直者L代表欺诈者。第三行输出一个正整数q代表询问的次数。接下来的q行每行输入两个正整数x和y代表一次询问。输出为q行分别代表每次的指证结果。请用c++实现
#include
const int MAXN = 1005;
char identity[MAXN]; // 存储每个人的身份,H为正直者,L为欺诈者 bool truth[MAXN][MAXN]; // truth[i][j]为true表示i指证j是正直者,为false表示i指证j是欺诈者
int main() { int n, q; cin >> n >> identity + 1 >> q;
// 处理指证关系
for (int i = 1; i <= q; i++)
{
int x, y;
cin >> x >> y;
truth[x][y] = true;
}
// 枚举每个人,判断其身份是否合法
for (int i = 1; i <= n; i++)
{
bool is_honest = true; // 假设当前人是正直者
for (int j = 1; j <= n; j++)
{
if (truth[j][i]) // 如果有人指证当前人是正直者
{
if (identity[j] == 'L') is_honest = false; // 如果指证者是欺诈者,则当前人不可能是正直者
}
else // 如果有人指证当前人是欺诈者
{
if (identity[j] == 'H') is_honest = false; // 如果指证者是正直者,则当前人不可能是欺诈者
}
}
cout << (is_honest ? "H" : "L") << endl; // 输出当前人的身份
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/burM 著作权归作者所有。请勿转载和采集!