• 清北学堂Day 5游记


    佛系人生 && rank 47 gg

    早上又吃了自己的饭(食堂的饭简直令人震惊),匆匆跑到电脑旁,下题目,打好头文件,浏览一下题,接下来,令人震惊的事情接连发生。。。。。。

    T1:妈耶,1000000的数据范围,要线性算法吧qwq?(事实上确实是),想想想,感觉还是可做的......

    8:40:妈耶,还是不会,这是T1?算了,写个80分的线段树吧,码码码......

    9:08:妈耶,肚子疼,看了看表,线段树码完了,还是去上个厕所吧。

    9:38:回来一看,妈耶!赶紧调试,调调调......

    10:15:总算从RE变成了WA,大样例过不了。cao,这样要凉了啊,算了,将就一下写个60分暴力,写之前先看看T3,

    T3貌似有沙雕的N4的暴力,N3似乎很可做?一看表:10:20,感觉很虚,应该先打打暴力,码码码......

    10:30 T1暴力码完了,结果:妈耶!大样例还是没过,脑海中一片空白...................

    10:30-------10:45 :发呆,什么也没干。

    10:45:彻底弃疗,还剩45min,我还是爆零态,那么,索性心平气和地看看那凉心的题吧,吧,吧.......妈耶!T1读错了,首先n<=1000000,漂亮的线段树貌似可以?其次,不能倒着走,只能正着走!WTF?

    10:55--11:31 光速码..........

    最终期望得分:100+40+40,实际得分:80+30+0;

    结果没有出乎意料,毕竟线段树常数大,但是T3的暴力挂了很不爽(毕竟花了5分钟写完的),而且听说N^3可以过90%数据?那真是太狂野了。

    题解:

    T1
    单调队列

    **T2 **
    首先我们要一行一行的考虑、

    dp[i][][][][] 前i行棋子的状态是? ? ? ?,此时的方案总数

    黑棋是每行每列放两个,白棋是每行每列放一个

    一行一行枚举时,强制让每行放2黑的,1白的,只要考虑所有列符合条件就可以了。

    一个列: 白 放 / 没放 黑 放1个/没放/放两个

    所以我们很自然的想到dp[i][a][b][c][d][e][f] 表示前i行,0白0黑的列有a列,0白1黑的有b列,0白2黑的有c列,1白0黑...

    由于 a+b+c (0个白的列的个数) +d+e+f(放了1个白的列的个数) = n

    所以对于第i+1行,枚举3个棋子放的状态,O(1)转移

    O(n^7) -> O(n^6)

    对于白棋,因为每行放一个,现在总共放了i行,所以肯定有i列放了白棋。
    d+e+f=i。
    O(n^6) -> O(n^5)

    对于黑棋,每行放两个,所以有
    b+e+2c+2f = 2*i
    O(n^5) -> O(n^4) n=50

    T3
    我们先预处理出g[i][j]表示 i 到 j区间的最长的满足条件的区间长度(O N^2)
    之后开始解决问题:
    先枚举第一段区间的右端点r,当l=1时,求出所有 × (×代表哪些不能放) 的位置,并求出第二段区间能取的最大长度。
    随着l往右走,部分×被解锁,更新第二段区间的最大长度(并查集实现),然后更新答案。
    f[i]表示在并查集树上的父亲,i的祖先就表示从i出发向右最近×的位置。
    x这个位置被解锁了,getf(x+1)表示新增的区间右端点在哪里, 更新f呢,f[x]=getf(x+1);
    总之,说的好我选择平衡树

    学习笔记:
    T1

    题解:

    T2

  • 相关阅读:
    MongoDB结构划分
    iphone下scrollview图片浏览器小记
    图文详解linux/windows mysql忘记root密码解决方案
    【记】Javascript遍历对象属性的方法
    【jQuery】jQueryUI中的datepicker在overflow下的两点点小小的问题。
    第一个测试文章
    【记】Javascript的正则表达式RegExp
    【记】IE下input标签中的paddingleft和paddingright
    【CSS】关于IE、FireFox中table强制换行的总结
    【DOCTYPE】兼容模式和标准模式
  • 原文地址:https://www.cnblogs.com/bullshit/p/9745445.html
Copyright © 2020-2023  润新知