Codechef April Challenge 2019 游记

Subtree Removal

题目大意:

一棵\(n(n\le10^5)\)个结点的有根树,每个结点有一个权值\(w_i(|w_i\le10^9|)\)。你可以进行若干次(包括\(0\)次)操作,每次你可以选择一个连通块,将其删去。若你的操作次数为\(k\),则总收益为剩下结点权值之和\(-X\cdot k\)。求最大总收益。

思路:

树形DP,\(f_x\)表示以\(x\)为根的子树的最大总收益。转移时\(f_x=w_x+\sum_{y\in{\rm children}_x}f_y\)。若\(f_x<-X\),则令\(f_x=-X\)。

时间复杂度\(\mathcal O(n)\)。

源代码见提交记录

Playing with Numbers

题目大意:

一棵\(n(n\le10^5)\)个结点的有根树,每个结点有一个权值\(v_i\)和一个额外的属性\(m_i\)。对于一个叶子结点\(l_i\),定义其答案为:

  • 对于从根节点到\(l_i\)的路径上的每个节点,选择一个非负整数,乘以节点的点权。
  • 对路径上所有节点按照上述方式算出来的值求和。
  • 叶子\(l_i\)的答案就是和对\(m_{l_i}\)取模的最大值。

求每个叶子节点的答案。

思路:

一个结论是,若干个数\(\{A_1,A_2,\ldots,A_k\}\)在模\(m\)意义下,能组合出的最大数为\(m-\gcd(A_1,A_2,\ldots,A_k,m)\)。

只需一次DFS求出\(l_i\)到根结点链上的\(\gcd\),然后套用上述结论即可。

时间复杂度\(\mathcal O(n\log v_i)\)。

源代码见提交记录

Kira Loves Palindromes

题目大意:

给定字符串\(S(|S|\le1000,S_i\in[\texttt{'a'},\texttt{'z'}])\),请求出有多少种方案可以从该字符串中选出两个不相交的非空子串(记为\(s_1\)和\(s_2\)),使得其串接\(s_1+s_2\)为回文串。

我们认为\((s_1,s_2)\)和\((s^′_1,s^′_2)\)是不同的两种方案,当且仅当\(s_1\)和\(s^′_1\)的位置不同,或者\(s_2\)和\(s^′_2\)的位置不同。

思路:

如图所示:

\(s_1=\texttt{'abc'},s_2=\texttt{'xyxcba'}\),其中\(\texttt{'abc'}\)和\(\texttt{'cba'}\)是对应的部分,而\(\texttt{'xyx'}\)是插入在中间的回文串。

枚举两个\(\texttt{'c'}\)的位置\(p\)和\(q\),二分出从\(p\)和\(q\)往两侧扩展出的最长距离\(len\),对于插入串\(S_{[l,r]}\),预处理出满足\(l=p+1\)且\(r<q-1\)或\(r=q-1\)且\(l>p+1\)的回文串个数\(cnt\)(注意这里不考虑\(l=p+1\)且\(r=q-1\)的情况,避免算重)。对于固定的\(p,q\),答案为\(len\times(cnt+1)\)(\(+1\)表示插入串为空)。最后将未统计的\(l=p+1\)且\(r=q-1\)的情况计入答案即可。

使用字符串哈希算法可以简单地实现。

时间复杂度\(\mathcal O(n^2\log n)\)。

源代码见提交记录

Offer for Chef

题目大意:

一个长度为\(n(n\le10^5)\)的数列\(A_{1\sim n}\),\(q(q\le10)\)次询问,每次给出数列\(t_{1\sim n}\)(\(t_i\)中只有不超过\(50\)个数不为\(0\))和一个整数\(k\),问将这个数列分为\(k\)段,定义每一段的价值为区间内每个元素\(A_i\cdot t_i\)之和。总收益为所有区间价值的按位与。最大化总收益。

思路:

原题链接CF981D

显然我们可以将\(A_i\cdot t_i=0\)的数去掉,记剩下数的个数为\(m\)。

从高到低枚举答案的每一个二进制位,判断是否可以为\(1\)。若可以,则在保留这一位的情况下处理下一位。判定某一位是否能为\(1\)可以用一个\(\mathcal O(m^3)\)的动态规划实现,这里不再赘述。

大约枚举\(60\)个二进制位,时间复杂度\(\mathcal O(60\cdot qm^3)\)。

源代码见提交记录

Mininum XOR over Tree

题目大意:

给定一棵\(n(n\le2\times10^5)\)的有根树,每个结点有权值\(w_i(1\le w_i<2^20)\)。\(q(q\le10^6)\)次询问,给定结点\(v\)和参数\(k(q\le k<2^20)\),求对于子树\(v\)中所有结点\(u\),\(w_u\oplus k\)的最大值,并输出使答案最大的编号最小的\(u\)。强制在线。

思路:

以DFS序为时间,建立可持久化01字典树。查询时就在子树对应的区间内查找能异或出的最大值。

考虑如何根据这个\(w_u\oplus k\)的最大值求出最小的\(u\)。

将所有结点以\(w_i\)为第一关键字,DFS序为第二关键字排序。维护区间内结点编号的最小值。询问时由于知道了\(w_u\),只须在对应权值、对应DFS序的区间内查找最大值即可。这可以用稀疏表方便地实现。

时间复杂度\(\mathcal O(n\log n+(n+q)\log w_i)\)。

实现上需要注意常数。

源代码见提交记录

Codechef April Challenge 2019 游记的更多相关文章

  1. CodeChef April Challenge 2019题解

    传送门 \(Maximum\ Remaining\) 对于两个数\(a,b\),如果\(a=b\)没贡献,所以不妨假设\(a<b\),有\(a\%b=a\),而\(b\%a<a\).综上, ...

  2. Codechef April Challenge 2019 Division 2

    Maximum Remaining 题意:给n个数,取出两个数$a_{i}$,$a_{j}$,求$a_{i}\% a_{j}$取模的最大值 直接排个序,第二大(严格的第二大)模第一大就是答案了. #i ...

  3. Codechef October Challenge 2018 游记

    Codechef October Challenge 2018 游记 CHSERVE - Chef and Serves 题目大意: 乒乓球比赛中,双方每累计得两分就会交换一次发球权. 不过,大厨和小 ...

  4. Codechef September Challenge 2018 游记

    Codechef September Challenge 2018 游记 Magician versus Chef 题目大意: 有一排\(n(n\le10^5)\)个格子,一开始硬币在第\(x\)个格 ...

  5. Codechef November Challenge 2019 Division 1

    Preface 这场CC好难的说,后面的都不会做QAQ 还因为不会三进制位运算卷积被曲明姐姐欺负了,我真是太菜了QAQ PS:最后还是狗上了六星的说,期待两(三)场之内可以上七星 Physical E ...

  6. Codechef October Challenge 2019 Division 1

    Preface 这次CC难度较上两场升高了许多,后面两题都只能借着曲明姐姐和jz姐姐的仙气来做 值得一提的是原来的F大概需要大力分类讨论,结果我写了一大半题目就因为原题被ban了233 最后勉强涨了近 ...

  7. Codechef September Challenge 2019 Division 2

    Preface 这确实应该是我打过的比较水的CC了(其实就打过两场) 但由于我太弱了打的都是Div2,所以会认为上一场更简单,其实上一场Div的数据结构是真的毒 好了废话不多说快速地讲一下 A Eas ...

  8. Codechef August Challenge 2019 Division 2

    Preface 老年菜鸡终于开始打CC了,由于他太弱了所以只能打Div2 因为台风的原因challenge并没有写,所以水了个Rank7 A Football SB模拟题不解释 #include< ...

  9. 【Code Chef】April Challenge 2019

    Subtree Removal 很显然不可能选择砍掉一对有祖先关系的子树.令$f_i$表示$i$子树的答案,如果$i$不被砍,那就是$a_i + \sum\limits_j f_j$:如果$i$被砍, ...

随机推荐

  1. Centos7添加新源

    yum repolist # 查看yum源列表yum localinstall http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epe ...

  2. 动态将ASPX生成HTML网页并将网页导出PDF

    1.首先要找到wnvhtmlconvert.dll这个文件,并引入项目中. 2.Server.Execute("pos.aspx?id=" + ids); 执行相应的aspx网页 ...

  3. mysql删除表结构中的“关键字”字段

    问题描述:一同事误将“describe”关键字放入建表语句中,虽成功建表,但因未关键词的缘故,无法插入数据.故需将字段drop并换为非关键字的字段. 解决过程: 按常规删除字段语句操作报错,语句如下: ...

  4. Redis缓存穿透和缓存雪崩以及解决方案

    Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案缓存穿透解决方案布隆过滤缓存空对象比较缓存雪崩解决方案保证缓存层服务高可用性依赖隔离组件为后端限流并降级数据预热缓存并 ...

  5. spring cloud 学习笔记(1)

    SpringCloud + Eureka / Nacos git:https://github.com/huanmsf/springCloudLearn.git 项目目录: 父pom: <?xm ...

  6. multiwan 系统配置补充

    /etc/sysctl.conf: # Controls source route verification net.ipv4.conf.default.rp_filter = # Allows to ...

  7. CleanWebpackPlugin 低版本失效

    解决这个问题只需要 升级至2.0.1版本就行  不需要传参

  8. 2小程序canvas使用,及一些坑,以及自己的一些小总结

    自己做了一个小程序,主要用于给头像加图标的那种,和qq似的,主要用canvas做的, 第一回用,掉了很多坑,所以今天总结一下自己所做的,如果大家有不理解的地方,欢迎提问:如果帮到大家的话,帮忙点个啥的 ...

  9. 链表详解(C语言)

    链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用. 链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入 ...

  10. 学习笔记_J2EE_Mybatis_02_mybatis注解配置入门

    mybatis入门示例 声明式 1.概述 mybatis的注解配置版,为了偷懒,直接在之前xml版本的文件上修改的:同样为了偷懒,今天只写示例V1.0版基础配置版 ,后面再更新细节.    一个不偷懒 ...