Educational Codeforces Round 153

C

题意:

有一个 n 的全排列,A 和 B 在玩游戏,每人一回合,A先开始。第一回合的时候,A 可以选择一个位置放上一个筹码,接下来的回合里面每个人都要移动这个筹码,移动需要满足:j < i 并且 \(p_j\) < \(p_i\) (i 是当前筹码位置,j是移动位置),谁没得选谁就赢
问如果 A 想必胜,那么第一回合他有几种放法

思路:

假设A当前将筹码放在了 i 上,那么如果A想要获胜,就必须满足:

  1. \(p_i\) 大于前面的最小值
  2. 前面没有的必败态(\(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;
}
posted @ 2023-08-19 21:24  自动机  阅读(26)  评论(0)    收藏  举报