三十年河东,三十年河西|

自动机

园龄:1年10个月粉丝:2关注:4

Educational Codeforces Round 153

C

题意:

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

思路:

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

  1. pi 大于前面的最小值
  2. 前面没有的必败态(pi > 前面最小的必败态)
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;
}

本文作者:自动机

本文链接:https://www.cnblogs.com/monituihuo/articles/17643153.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   自动机  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起