摘要: 反思 写一写可以发现上限不断更新 一直在想怎么判断NO,刻板拘泥于错误的模型,想要像往常一样贪心地、读入当前值就能判断会不会NO,实际上只要构造完以后,最后把所有操作重新跑一遍看会不会冲突即可判断NO C++ include include include include using namespa 阅读全文
posted @ 2019-07-02 23:56 AlphaWA 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 要点 不难发现问题转化成:n堆石子,每次最多选k堆最少选1堆然后拿走一个石子,谁先没子可拿谁败。本题中撤退不必考虑。 就是记笔记吧,类似nim的博弈,举例:$$k=3,n=4$$$$4堆石子分别是1、2、3、3$$全化为二进制$$01$$$$10$$$$11$$$$11$$然后每一位纵向加和,两位都 阅读全文
posted @ 2019-07-02 23:49 AlphaWA 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 要点 会发现本质上棋盘分成了若干个独立集,本集合内的点放不放棋子并不影响其他集合内的 集合的划分方式就是满棋盘跳马步直到全跳过了,然后每个集合就分成两队,我们选人多的那队放棋子,人少那队当禁区 C++ const int maxn = 1e3 + 5; const int nx[] = { 2, 2 阅读全文
posted @ 2019-07-02 23:41 AlphaWA 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 要点 做法是删去连续的k个0或k个1,连消、消消乐的那种,网上博主用个栈$O(n)$就很优秀地操作了这个过程 原因是有性质:比如k=3,101000贪心地翻就能翻成000101,所以连续的k个可以都挪到后面去 C++ / GYM 101981 E / include include using na 阅读全文
posted @ 2019-07-02 23:37 AlphaWA 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 要点 括号序列平衡度即树深度 的性质 相当于中序遍历,则两点间最浅的地方即是LCA 的性质 线段树维护$d(a) + d(c) 2 d(lca(a,c))$,一层层剥,思考维护这个量需要什么,结果维护一大堆。 C++ include include include using namespace s 阅读全文
posted @ 2019-07-02 23:31 AlphaWA 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 反思 三维的dp压根没看出来,看题解以后思路又很直观,找几道字符串dp练练才行 序列自动机和优化一维略 C++ / __ __ ____| |_____| |____ | | | __ | | | | include include include include include include i 阅读全文
posted @ 2019-07-02 23:25 AlphaWA 阅读(247) 评论(0) 推荐(0) 编辑