1148 Werewolf - Simple Version (20分)
狼人杀游戏:共给出N个玩家,其中两人是狼人。总共有两个人在说谎,一人是狼人、一人是平民
第一行N表示共N个玩家,接下来N行数字,正数代表人类,负数代表狼人。输出狼人的序号
Werewolf(狼人杀)
ascending order 升序
先确定狼人,然后找说谎的人,如果说谎的人有两个且其中有一个是狼人就输出结果。
代码一:
#include<bits/stdc++.h>using namespace std;
int a[120],vis[120];
vector <int> vc;int main(){#ifdef ONLINE_JUDGE#elsefreopen(", "r", stdin);#endifint n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];//存储发言的内容for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){fill(vis,vis+n+1,1);//初始化都不是狼人vis[i]=vis[j]=-1;//i和j是狼人vc.clear();//vc存储说谎的人for(int k=1;k<=n;k++)if(a[k]*vis[abs(a[k])]<0)vc.push_back(k);if(vc.size()==2&&vis[vc[0]]+vis[vc[1]]==0){cout<<i<<" "<<j<<endl;return 0;}}}cout<<"No Solution"<<endl;return 0;
}
代码二:(更好理解一点)
#include<bits/stdc++.h>using namespace std;
int N;
int mystate[110];bool judge(int a,int b);int main(){scanf("%d",&N) ;int i,x,j;for(i=1;i<=N;++i){scanf("%d",&mystate[i]);}for(i=1;i<=N;++i){for(j=i+1;j<=N;++j){if(judge(i,j)){printf("%d %dn",i,j);return 0;}}}printf("No Solutionn");return 0;
}bool judge(int a,int b){int cntwol=0,cntpeo=0;int i,x;for(i=1;i<=N;++i){if(cntwol>1 || cntpeo>1){return false;}x=mystate[i];if(x>0){//人 if(x==a || x==b){if(i==a || i==b){++cntwol;}else{++cntpeo;}
// printf("i=%dn",i);}}else{//狼 x=-x;if(x!=a && x!=b){if(i==a || i==b){++cntwol;}else{++cntpeo;}
// printf("i=%dn",i);}}}if(cntwol==1 && cntpeo==1){return true;}else{return false;}
}
参考:?
?
本文发布于:2024-02-02 18:32:54,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170687015245660.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |