题解:P10737 [SEERC2020] Reverse Game

· · 题解

思路

## 举例证明 $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; } ```