主页
最近更新
题解:狼人杀狂想曲
最后更新于 2025-05-01 22:51:29
作者
Mitchell_Dracula
分类
题解
复制 Markdown
更新文章内容
题解来自 **7wny**。 ### 预备阶段: 不了解狼人杀规则的建议[先看看](https://baike.baidu.com/item/%E7%8B%BC%E4%BA%BA%E6%9D%80/20462401?fr=aladdin)。 ### 题目大意: 给你一个**简化过的**狼人杀过程记录,请你输出活下来的人和每人犯错的次数。**为了简化,规则有适当改动**。 ### 思路: 看一下数据范围就发现模拟轻轻松松就能过。 一道模拟练手题。暴力模拟即可。 需要注意的点比较多,主要是细节问题。 首先我们需要输入,记住,第一行是**读入身份**。 输入完以后,此时我们可以边输入边处理。 具体的,只要根据身份一个一个的判断就行了。 我们开几个数组来存储身份、犯错次数、死亡情况、是否被守护几个信息。 然后便手动模拟游戏,并记录好各种的信息。最后输出就行了。 再次重复一次:**女巫不可以杀人,死亡以后的玩家不可以做任何事情!** ### 代码: ```cpp #include <iostream> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector<int> identity(N + 1); vector<bool> alive(N + 1, true); vector<int> mistakes(N + 1, 0); for (int i = 1; i <= N; ++i) { cin >> identity[i]; } int op, a, b; while (cin >> op && op != 0) { cin >> a >> b; if (op == 1) { if (identity[a] != 1 || !alive[a]) { mistakes[a]++; } else { if (!alive[b]) { mistakes[a]++; } else { alive[b] = false; } } } else if (op == 2) { if (identity[a] != 2 || !alive[a]) { mistakes[a]++; } else { if (alive[b]) { mistakes[a]++; } else { alive[b] = true; } } } else if (op == 3) { if (identity[a] != 3 || !alive[a]) { mistakes[a]++; } } } int survivors = 0; for (int i = 1; i <= N; ++i) { if (alive[i]) { survivors++; } } cout << survivors << '\n'; for (int i = 1; i <= N; ++i) { cout << mistakes[i] << " "; } cout << '\n'; return 0; } ```
Loading...
点赞
0
收藏
0