这场题目设置有点问题啊,难度:Div.2 A->Div.2 B->Div.2 D->Div.2 C->Div.2 D->Div.1 D-> Div.1 E->Div.1 F简直有毒

只AC 4题似乎就是1000+名了

这种考验手速的时刻Itst就比较擅长了,然后就红名+拿衣服了……

A. Ilya and a Colorful Walk

如果最左边和最右边不同就是\(N-1\),否则就是中间跟两边颜色不同的块到两边距离的最大值

代码

B. Alyona and a Narrow Fridge

二分答案,对于一个二分值\(mid\)将所有要放的牛奶拿出来,每一次最高的和次高的放在一层

代码

C. Ramesses and Corner Inversion

注意到对任意\(x \times y\)的矩形做一次操作,等价于对这个矩形内所有\(2 \times 2\)的子矩形做一次操作,于是我们只需要对\(2 \times 2\)的矩形做操作就可以了,这个直接从左往右、从上往下、要翻转就翻转就可以了

代码

D. Frets On Fire

题目相当于要求:有\(n\)条线段,左端点为\(s_i\);\(q\)组询问,每一组询问每条线段的长度都为\(l\),问线段覆盖总长度

设\(s_{i+1} = INF\),那么答案就是\(\sum\limits_{i=1}^n \min\{s_{i+1} - s_i , l\}\)。把所有\(s_{i+1}-s_i\)存下来排个序,每一次询问时二分

代码

E. Pavel and Triangles

显然每一次选出的三角形的边长一定是\((2^i,2^i,2^j)\),其中\(j \leq i\)。所以可以从小往大贪心,每一次选择尽可能多的三角形,即先把\(< i\)的剩下的木棒尽可能地用掉,然后再3个3个地取当前剩余的木棒

代码

F. Niyaz and Small Degrees

先考虑对于一个\(x\)求答案。考虑树形DP。

设\(val_u\)表示\(u\)到它父亲的边的权值,设\(f_{u , flag = 0/1}\)表示对于\(u\)子树内的点除\(u\)以外度数都不超过\(x\),且\(u\)的度数不超过\(x+flag\)时的最小代价。

转移考虑:对于一个点\(v\),假设它的度数为\(d_v(d_v > x)\),那么转移到\(f_{v,1}\)的状态中需要切掉\(v\)与其孩子的\(d_v - x - 1\)条边,而转移到\(f_{v,0}\)需要切掉\(d_v - x\)条边。而对于\(y \in ch_v\),切掉边\((y,v)\)意味着\(f_v\)从\(f_{y,1}+val_y\)转移,否则从\(f_{y,0}\)转移。所以初始默认答案为\(\sum\limits_{y \in ch_v} f_{y,0}\),对于所有孩子按照\(f_{y,1}+val_y-f_{y,0}\)从小到大排序,选择前面若干条边切掉进行转移。

然后可以发现:\(\sum\limits_{i=1}^n d_i = 2(n-1)\)即\(\sum\limits_{i=0}^{n-1}\sum\limits_{j=1}^n [d_i > j] = 2(n-1)\)。所以如果称某一次询问中必须要切掉相邻的若干条边的点为重要点,则在所有询问中,重要点的总和为\(2(n-1)\)。

到这里不难想到虚树。对于每一次询问建立虚树。因为虚树上无法体现重要点与非重要点之间的边,但是实际有可能会切掉这样的边,所以对于每一个重要点用一个堆维护它和它非重要点孩子之间的边的边权。DP过程中,如果某个点\(x\)与虚树上\(x\)的孩子\(y\)在原树上的距离超过\(2\),则直接用\(\min(f_{y,0} , f_{y,1} + val_y)\)转移\(f_x\),否则像上面一样先默认转移\(f_{y,0}\),然后把\(f_{y,1} + val_y - f_{y,0}\)丢进堆里,用堆求前若干小转移到\(f_{x,0}\)和\(f_{x,1}\)。

将询问从小到大做,就可以直接维护每个重要点的非重要点儿子的堆。

Update:关于priority_queue,它的赋值操作似乎跟元素个数有关(但是非常快?),大力赋值在菊花图上会TLE,所以要用multiset对操作进行撤销。

代码

G. Get Ready for the Battle

答案的下界是\(\lceil \frac{\sum\limits_{i=1}^m hp_i}{n} \rceil\),而构造题一般都会取到这个下界(要不然怎么构造啊喂),所以考虑构造一种方式使得总攻击次数达到下界。那么我们需要尽可能少地浪费兵力,也就是说要尽可能把所有敌人打到\(0\)血。

为了构造的方便,我们令攻击方式为:先所有军队一起攻击第一个敌人,当第一个敌人的血量\(<n\)时,让一个前缀的军队攻击第一个敌人,让第一个敌人恰好达到\(0\)血,剩下的军队直接去攻击第二个敌人。维护前缀和\(sum_i\),也就是说对于\(\forall i \in[1,m)\),要存在一个前缀的军队,它们的人数之和为\(sum_i \mod n\)。不难想到一种可行方案:将所有\(sum_i \mod n\)排序得到数组\(b_i\),\(b_0 = 0 , b_m = n\),则\(s_ i = b_i - b_{i-1}\)。

构造方案直接暴力模拟上面的攻击方法。

代码

H. Triple

一个暴力是\(O(n2^kk)\)的FWT,显然跑不过

显然地,对于三元组\(A,B,C\),将其变为\(0,A \oplus B , A \oplus C\),把最后结果的下标异或上\(A\),这两者得到的结果等价。

那么在初始的数组中,\(F_0 = a , F_{A \oplus B} = b , F_{A \oplus C} = c\),FWT之后每个位置一定会是\(a+b+c,a+b-c,a-b+c,a-b-c\)中的一个。

设暴力FWT之后全部乘起来得到的某个位置的值为\((a+b+c)^x(a+b-c)^y(a-b+c)^z(a-b-c)^w\),解出\(x,y,z,w\)就可求出FWT结果。

首先\(x+y+z+w=n\),然后任意给\((a,b,c)\)赋值不会改变\(x,y,z,w\)的值,那么令\((a,b,c) = (0,1,0)\),将得到的\(F\)数组加起来FWT。因为FWT的和等于和的FWT,故有\((a+b+c)x + (a+b-c)y + (a-b+c)z + (a-b-c)w = p\),其中\(p\)就是FWT后得到的当前位置的值。对于\((a,b,c) = (0,0,1)\)也做一遍。

现在有了\(3\)个方程,但\((a,b,c)=(1,0,0)(0,1,0)(0,0,1)\)都出现过了,再取\((a,b,c)\)都和这三个向量线性相关,所以要换一种思路。考虑数组\(G\),\(G[x] = \sum\limits_{i=1}^n [B_i \oplus C_i = x]\),对这个数组FWT,可以得到\(x-y-z+w=q\),其中\(q\)是FWT完成之后的点值表示。

原因大概是:设序列\(F\)FWT后的序列为\(F'\),那么\(F[b]\)对\(F'[a]\)的贡献的系数是\((-1)^{count(a \& b)}\),其中\(count(x) = x\)在二进制下\(1\)的个数,这个可以由FWT的式子得到。如果第\(i\)个三元组FWT之后第\(j\)位的值为\(a-b+c\),那么有\(2 \not\mid count((A \oplus B) \& j) , 2 \mid count((A \oplus C) \& j)\),即\(2 \not\mid count((B \oplus C) \& j)\),那么\(F[B \oplus C]\)对\(F'[j]\)的贡献就是\(-1\),其余同理。

那么现在得到了\(4\)个方程组,可以求出点值表示,最后IFWT一下。

代码

BONUS:可以利用与上面类似的方法解决更一般的对于\(m\)元组、\(A,B,C < 2^k\)的问题,复杂度约为\(O(2^{m+k}(m+k)+nm)\)。

Codeforces Global Round 2 Solution的更多相关文章

  1. CodeForces Global Round 1

    CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...

  2. Codeforces Global Round 1 - D. Jongmah(动态规划)

    Problem   Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...

  3. Codeforces Global Round 2 题解

    Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...

  4. Codeforces Global Round 1 (A-E题解)

    Codeforces Global Round 1 题目链接:https://codeforces.com/contest/1110 A. Parity 题意: 给出{ak},b,k,判断a1*b^( ...

  5. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  6. Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)

    Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...

  7. 【手抖康复训练1 】Codeforces Global Round 6

    [手抖康复训练1 ]Codeforces Global Round 6 总结:不想复习随意打的一场,比赛开始就是熟悉的N分钟进不去时间,2333,太久没写题的后果就是:A 题手抖过不了样例 B题秒出思 ...

  8. Codeforces Global Round 11 个人题解(B题)

    Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...

  9. 【Codeforces Round 1110】Codeforces Global Round 1

    Codeforces Round 1110 这场比赛只做了\(A\).\(B\).\(C\),排名\(905\),不好. 主要的问题在\(D\)题上,有\(505\)人做出,但我没做出来. 考虑的时候 ...

随机推荐

  1. ELK 经典用法—企业自定义日志收集切割和mysql模块

    本文收录在Linux运维企业架构实战系列 一.收集切割公司自定义的日志 很多公司的日志并不是和服务默认的日志格式一致,因此,就需要我们来进行切割了. 1.需切割的日志示例 2018-02-24 11: ...

  2. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(3)- 命名规则

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的命名规则. 打开任何一款i.MX RT系列芯片的Data Sheet均可找到如下命名规则表,以i.MX ...

  3. Python之文件和目录操作

    1.文件基本操作 python内置了打开文件的函数open(),使用规则如下:   File_object=open(filename[,access_mode][,buffering]) Filen ...

  4. asp.net mvc Html.BeginForm()及Html.Action用法

    Html.BeginForm    Add:操作方法的名称,Activities:控制器的名称,FormMethod.Post:定义from的method的值,,new { id = "fo ...

  5. C# 创建邮件合并模板并合并文本、图片

    对于Word中的邮件合并功能,用户可以将邮件合并后的结果文档保存并打印,也可以通过邮件的形式发送,在很多场合需要使用到此功能.那对于编程人员,我们也可以在C#语言环境中通过代码的形式来实现.根据需要先 ...

  6. 分析解剖微服务系列(二)-SOA和微服务异同

    微服务架构模式成熟之前,软件领域讨论的比较多的是SOA的架构模式.SOA早在1996年就由Gartner提出,作为面向服务的架构模式,SOA的理念是对于复杂的企业IT系统,按照不同的.可重用的粒度划分 ...

  7. paas saas iaas 区别

    最近在公司里面经常听到一些paas saas iaas云服务的名词,把我自己都听蒙圈啦,所以就各种找资料终于对这三个名词有了一定的了解 首先上一张图如下: IAAS(nfrastructure as ...

  8. Laravel Excel 实现 Excel-CSV 文件导入导出功能

    Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...

  9. WEB前端学习代码片段记录

    1.JS设计模式片段 Function.prototype.addMethod = function (name,fn) { this.prototype[name] = fn; return thi ...

  10. 认证与Shiro安全框架

    本文内容均来自官网 1.简介 Apache Shiro是Java的一个安全框架.功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案. 实际上,S ...