现在,有一个 𝑛 级台阶的楼梯,每级台阶上都有若干个石子,其中第 𝑖 级台阶上有 𝑎𝑖 个石子(𝑖≥1)。
两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。
已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。
问如果两人都采用最优策略,先手是否必胜。
第一行包含整数 𝑛。
第二行包含 𝑛 个整数,其中第 𝑖 个整数表示第 𝑖 级台阶上的石子数 𝑎𝑖。
如果先手方必胜,则输出 Yes
。
否则,输出 No
。
1≤𝑛≤,
1≤𝑎𝑖≤
- 3
- 2 1 3
Yes
代码:
- #include
- using namespace std;
-
- const int N = 100010;
- int n;
- int p[N];
-
- int main(){
- cin>>n;
- for(int i = 0;i < n;i ++){
- cin>>p[i];
- }
- int res = 0;
- for(int i = 0;i < n;i ++){
- if(i % 2 == 0){
- res ^= p[i];
- }
- }
- if(res == 0){
- cout<<"No";
- }else{
- cout<<"Yes";
- }
- return 0;
- }