Educational Codeforces Round 153
C
题意:
有一个 n 的全排列,A 和 B 在玩游戏,每人一回合,A先开始。第一回合的时候,A 可以选择一个位置放上一个筹码,接下来的回合里面每个人都要移动这个筹码,移动需要满足:j < i 并且 \(p_j\) < \(p_i\) (i 是当前筹码位置,j是移动位置),谁没得选谁就赢
问如果 A 想必胜,那么第一回合他有几种放法
思路:
假设A当前将筹码放在了 i 上,那么如果A想要获胜,就必须满足:
- \(p_i\) 大于前面的最小值
- 前面没有的必败态(\(p_i\) > 前面最小的必败态)
inline void solve()
{
int n; cin >> n;
std::vector<int> a(n + 1);
for (int i = 1; i <= n; i++) cin >> a[i];
int minn = inf, minn1 = inf, ans = 0;
for (int i = 1; i <= n; i++)
{
if (a[i] > minn && a[i] < minn1)
{
minn1 = min(minn1, a[i]);
ans++;
}
minn = min(minn, a[i]);
}
cout << ans << endl;
}

浙公网安备 33010602011771号