开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情
至至子的鸿门宴
链接:ac.nowcoder.com/acm/problem…
来源:牛客网
题目描述
至至子和苏苏子玩游戏。
给定一个序列 aaa,长度为 nnn,且满足 1≤a1<a2<⋯<an1\le a_1 < a_2 < \cdots < a_n1≤a1<a2<⋯<an。
两人轮流对序列进行操作,至至子先手。每人每次选择一个 aia_iai 并让其减一,要求不破坏 1≤a1<a2<⋯<an1\le a_1 < a_2 < \cdots < a_n1≤a1<a2<⋯<an 的性质,无法操作者输。
假设至至子和苏苏子都绝顶聪明,那么请同样聪明绝顶的你告诉我,最后谁能赢。
输入描述:
第一行一个正整数 n,1≤n≤10_6。
第二行 n 个正整数,描述序列 a。满足 1≤a1<a2<⋯<an 且 an≤10_9。
输出描述:
输出只有一行一个字符串。若至至子必胜,则输出 ZZZ,若苏苏子必胜,则输出 SSZ。
示例1
输入
5
1 2 4 6 9
输出
ZZZ
说明
一种可能的情况是 (1,2,4,6,9)(1,2,4,6,9)(1,2,4,6,9) →\to→ (1,2,3,6,9)(1,2,3,6,9)(1,2,3,6,9) →\to→ (1,2,3,5,9)(1,2,3,5,9)(1,2,3,5,9) →\to→ (1,2,3,4,9)(1,2,3,4,9)(1,2,3,4,9) →\to→ (1,2,3,4,8)(1,2,3,4,8)(1,2,3,4,8) →\to→ (1,2,3,4,7)(1,2,3,4,7)(1,2,3,4,7) →\to→ (1,2,3,4,6)(1,2,3,4,6)(1,2,3,4,6) →\to→ (1,2,3,4,5)(1,2,3,4,5)(1,2,3,4,5),最后轮到苏苏子不能操作,所以至至子胜。
示例2
输入
3
1 2 3
输出
SSZ
说明
此时至至子一步都无法操作,所以苏苏子胜。
思路
这是一道简单博弈,因为不管怎么变都不能改变当前数组的特性,所以只要比较当前这个数减到他的位置的数的差,加起来,如果是偶数就是SSZ,否则就是ZZZ。(qwq很巧妙地一个题)
代码
#include<iostream>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
const int N=2E5+10;
int a[N];
signed main(){
IOS;
int n;
cin>>n;
int sum=0;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i]-i;
}
if(sum&1)cout<<"ZZZ"<<endl;
else cout<<"SSZ"<<endl;
return 0;
}