PTAウェアウルフ-シンプルバージョン(20分)

無限の光を放つのは人間の心であり、無限の闇を生み出すのも人間の心であり、光と闇が絡み合って戦うこの世界は、懐かしくて無力な世界です。

Werewolf(狼人杀)は、プレイヤーが狼と人間の2つのパーティに分割されるゲームです。ゲームで、

  • プレイヤー#1は言った: "プレイヤー#2は狼です。";
  • プレーヤー#2のコメント:「プレーヤー#3は人間です。」;
  • プレーヤー#3の発言:「プレーヤー#4は狼男です。」;
  • プレーヤー#4は次のように述べています。そして
  • プレーヤー#5は言った:「プレーヤー#4は人間です。」。

その中には2人の狼男がいることを考えると、少なくとも1人の狼男が嘘をついているわけではなく、正確に2人の嘘つきがいました。狼男を指摘できますか?

今、あなたはこの問題のより難しいバージョンを解決するように求められます:その中に2人の狼がいるN人のプレイヤーがいて、少なくとも1人ではあるがすべてではない狼が横たわっていて、正確に2人の嘘つきがいたと仮定します。あなたは狼男を指摘することになっています。

入力仕様:

各入力ファイルには1つのテストケースが含まれています。いずれの場合も、最初の行は正の整数N(5≤N≤100)を示します。次に、N行が続き、i番目の行はi番目のプレーヤー(1≤i≤N)のステートメントを示します。これは、人間の場合は正の記号、人狼の場合は負の記号を付けたプレーヤーのインデックスで表されます。

出力仕様:

解が存在する場合は、2つの狼のインデックスを昇順で1行に出力します。番号は、行の最初または最後に余分なスペースを入れずに、1つのスペースで区切る必要があります。複数の解がある場合は、最小の解シーケンスを出力する必要があります。つまり、2つのシーケンスA = a [1]、...、a [M]とB = b [1]、...、 b [M]、a [i] = b [i](i≤k)およびa [k + 1] <b [k + 1]であるような0≤k<Mが存在する場合、AはBよりも小さい。解決策がない場合は、単に印刷します  No Solution

入力例1:

5
-2
+3
-4
+5
+4

出力例1:

1 4

入力例2:

6
+6
+3
+1
-5
-2
+4

出力例2(ソリューションは一意ではありません):

1 5

入力例3:

5
-2
-3
-4
-5
-1

出力例3:

No Solution
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX

//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
typedef long long ll;
using namespace std;
int const mod=1e9+7;
const int maxn=1e5+10;
int n;
int main() {
    cin>>n;
    vector<int> v(n+1);
    for (int i=1; i<=n; i++)
            cin>>v[i];
    for (int i=1; i<=n; i++) {
        for (int j=i+1; j<=n; j++) {
            vector<int> ls, a(n + 1, 1);
            a[i]=a[j]=-1;
            for (int k=1; k<=n; k++)
                if (v[k]*a[abs(v[k])]<0)
                    ls.push_back(k);
            if (ls.size()==2&&a[ls[0]]+a[ls[1]]==0) {
                cout<<i<<' '<<j;
                return 0;
            }
        }
    }
    cout<<"No Solution"<<endl;
    return 0;
}

 

おすすめ

転載: blog.csdn.net/weixin_44170305/article/details/108465899