1148 Werewolf

直接暴力枚举。

bool check(int a,int b)
{
    set<int> wolfs;
    wolfs.insert(a),wolfs.insert(b);

    int liar_human=0,liar_wolf=0;
    for(int i=1;i<=n;i++)
    {
        int t=state[i];
        if((t < 0 && wolfs.count(abs(t)) == 0) || (t > 0 && wolfs.count(t)))
        {
            if(i == a || i == b) liar_wolf++;
            else liar_human++;
        }
    }
    return liar_wolf == 1 && liar_human == 1;
}

int main()
{
    cin>>n;

    for(int i=1;i<=n;i++) cin>>state[i];

    bool ok=false;
    for(int i=1;i<=n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            if(check(i,j))
            {
                cout<<i<<' '<<j<<endl;
                ok=true;
                break;
            }
        }
        if(ok) break;
    }

    if(!ok) puts("No Solution");

    //system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14487633.html