我什么时候写一下污污的小故事呢?反正不是现在。
题目描述
Alice 和 Bob 在玩游戏。
他们有 nn 堆石子,第 ii 堆石子有 a_iai 个,保证初始时 a_i \leq a_{i + 1}(1 \leq i < n)ai≤ai+1(1≤i<n)。现在他们轮流对这些石子进行操作,每次操作人可以选择满足 a_i > a_{i - 1}ai>ai−1(a_0a0 视为 00)的一堆石子,并从中取走一个。谁最后不能取了谁输。Alice 先手,他们都使用最优策略,请判断最后谁会取得胜利。
输入输出格式
输入格式:
第一行一个整数 n(1 \leq n \leq 100)n(1≤n≤100),表示石子堆数。
接下来一行 nn 个数,第 ii 个数为 a_i(1 \leq a_i \leq 10^9)ai(1≤ai≤109),意义如上所述。
输出格式:
"Alice" 或 "Bob",表示谁会赢。
输入输出样例
输入样例#1: 复制1 1输出样例#1: 复制
Alice输入样例#2: 复制
1 2输出样例#2: 复制
Bob
这是一道博弈论的题目,博弈就是两个人对刚。我们要减少逆序对数,就统计总数即可。
参考代码
#include<bits/stdc++.h> using namespace std; #define RE register int int n,sum; signed main(){ cin>>n; for (RE i=1,t;i<=n;++i) cin>>t,sum+=t; puts(sum&1?"Alice":"Bob"); }
代码说明
小垃圾,还是入门题。