1089 狼人杀-简单版 (20 分)
原题
https://pintia.cn/problem-sets/994805260223102976/problems/1038429385296453632
C++
转载参考 https://www.bilibili.com/read/cv11426576/
其实还是没懂。若满足说谎人数=2,说谎中的狼人=1,即为找到了一个结果(不需要你再去找另一个说谎者是谁)
关键是先确定狼人找说谎者——由冲突计算说谎者数量
#include
#include
using namespace std;
int main(void)
{
int N;
cin >> N;
vector vec(N + 1);
for(int i = 1; i <= N; i++){
cin>>vec[i];
}
vector goodMan(N + 1,1);//goodMan[i]==1表示i号是好人
int i,j;
for ( i = 1; i
错误代码——确定说谎者找狼人
#include
using namespace std;
bool equal(int a, int b);
int main()
{
int num = 0;
cin >> num;
int result[101];
int jugde[101] = {0};
for (int i = 1; i <= num; i++)
{
int option;
cin >> option;
result[i] = option;
}
int i, j;
for (i = 1; i <= num; i++)
{
for (j = i + 1; j <= num; j++)
{ //说谎人编号i j
bool flag = true;
for (int s = 1; s <= num; s++)
{
jugde[s] = 0;
}
jugde[abs(result[i])] = result[i] * (-1);
jugde[abs(result[j])] = result[j] * (-1);
for (int k = 1; k <= num; k++)
{
if (k != i && k != j)
{
if (jugde[k] == 0)
{
jugde[abs(result[k])] = result[k];
}
else if (jugde[abs(result[k])] * result[k] < 0) //不等
{
flag = false;
break;
}
else
jugde[abs(result[k])] = result[k];
}
}
if (flag && equal(jugde[i], jugde[j])) //不冲突并且说谎人中有一个狼人
{
int count=0;
for (int s = 1; s <= num; s++)
{
// cout << s << "*";
if (jugde[s] <= 0)
count++;
}
for (int s = 1; s <= num; s++)
{
// cout << s << "*";
if (count==2&&jugde[s] <= 0)
cout<