zoukankan      html  css  js  c++  java
  • 联考4

    T1

    看名字就知道是跟卡特兰数有关系,于是我当时就打了一个dp暴力就跳了?并且我现在看不懂我的(N^2dp) 了。

    算卡特兰数的时候是记横坐标为放的左括号数量,纵坐标为放的右括号数量,那么合法的括号序列其实就意味着从((0,0))走到((n,n))并且不碰(y=x+1)这条直线的方案数,因为碰到的话就至少有一个不能匹配的括号对了。

    这题其实也是一样,只是改成只能有(m)个括号对未匹配而已,那么可以先差分一下,答案就是不超过(m)个括号对未匹配的方案数减去不超过(m-1)个括号对未匹配的方案数,如果不超过(m)个括号未匹配,那么其实就是不能碰到直线(y=x+m+1),所以将路线翻折一下就能得到这种路线唯一对应一条到达((n-m-1,n+m+1))的路径,
    所以最后答案就是(C^{n-m}_{2n}-C^{n-m-1}_{2n}),注意折线法的应用。

    T2

    数学的魅力来了

    直接二项式定理展开算,时间复杂度有点高所以注意卡常。

    T3

    观察得到结论,最后剩下的数一定是中间的两到三个数之一。

    先假设序列为偶数,那么最后一定是想要大数的那个人结束战斗,所以设(mid=1+n>>1),则答案为(max(a[mid],a[mid+1])),不可能是别的数,因为假设是别的数(x),如果(x)比中间那个数大,想要小数的就会把它取走,否则另一个人取走。

    那序列为奇数呢?第一个人拿走一个数后就是偶数序列了,并且拿走的数一定且只能是最左边的或者是最右边的,如果是最左边的,那么剩下的序列中,最后一个取的人是想要小数的,答案为(min(a[mid],a[mid+1])),否则为(min(a[mid],a[mid-1])),因为第一次选择是想要大数的人选择,所以二者取(max)

    如果提前拿走数的话,就是移动了中心,可以求出中心移动的范围然后构造一个新数列于是就成了RMQ问题。

    T4

    也要得出结论,当且仅当(sum_{i=1}^nfrac{1}{2^{a_i}}<1)玩家会赢,所以就完了。。

    博弈论的题要找找规律推推结论。

    int - > long long 0 - > 100
  • 相关阅读:
    css3 box-sizing盒模型
    数字递增组件
    设置视频水平垂直居中显示在页面上
    修改placeholder样式,兼容多个浏览器
    一款还不错的日期插件layDate
    vue-cli打包后出现 “Uncaught SyntaxError: Unexpected token <”这个错
    详谈C++虚函数表那回事(一般继承关系)
    C++多态的实现及原理详细解析
    位运算求两个数的平均值
    网页设计入门<一>
  • 原文地址:https://www.cnblogs.com/anyixing-fly/p/13767557.html
Copyright © 2011-2022 走看看