题解:P10737 [SEERC2020] Reverse Game
xiangxiyu
·
·
题解
思路
## 举例证明
$100$ 反转后为 $001$,$100$ 有两个逆序对,反转就相当于走了两步,$10$ 有一个逆序对,反转后就为 $01$ 相当于走了一步,最后时答案肯定是连续的 $0$ 连着连续的 $1$,逆序对个数为 $0$,我们只需要统计一下原序列中逆序对的个数,看一下能不能被 $3$ 整除就好了。
#### 提示
逆序对个数最大为长度的平方,要开 long long。
### 代码
```cpp
#include<bits/stdc++.h>
#define int long long
using namespace std;
int ans = 0,k = 0;
signed main() {
string a;
cin >> a;
int n = a.size();
for (int i=0;i<n;i++){
if (a[i] == '1') k++;
else ans += k;//统计逆序对个数
}
if(ans%3!=0) cout<<"Alice";//不能整除 Alice赢
else cout<<"Bob";//整除 Bob赢
return 0;
}
```