蒟蒻的心路历程

上来看B,结果不会。。。

回来做A,写完之后nantf已经切B了。

回来做B,花了13min磕了出来。

继续做C,自闭。

继续做D,花了10min磕了出来。

继续做E,一开始有点自闭,后来口胡了出来,但是实现略微死人,花了1h磕了出来。

继续自闭。。。。。。。

A XORinacci

\(a,b,a\oplus b,a,b,a\oplus b,\ldots\)

B Uniqueless

使用two-pointer, 前缀和优化后判断\(O(n)\),时间复杂度\(O(n^2)\)

D Restore Permutation

从后往前确定,目前求\(p_i\),已知\(\{p_1,p_2,\ldots,p_i\}\)和\(s_i\),可以通过线段树上二分得到\(p_i\),之后把\(p_i\)从线段树中删去。时间复杂度\(O(n\log n)\)。

E Let them Slide

对于一个数列\(a[1,l]\),设其中的最大值为\(a[p]\),则在\([p,p+w-l]\)这段区间的贡献为\(a[p]\),在\([1,p-1]\)这段区间中\(i\)的贡献为\(\max\limits_{j\in [\max(1,i-w+l),i]}a_j\),\([p+w-l+1,w]\)这段区间中\(i\)的贡献为\(\max\limits_{j\in [i,\min(w,i+w-l)]}a_j\),特别要考虑是否能不经过一个点\(i\),还有\(a[p]<0\)的情况也需要特殊考虑中间这段\([p,p+w-l]\)(其他的贡献为0)。这个取\(\max\)的运算可以使用单调队列计算。

由于\([p,p+w-l]\)这段区间非常大,所以可以打一个全局tag,表示所有数加上多少。

然后加一堆判断并注意正负号就可以过了。

#include<bits/stdc++.h>
#define Rint register int
using namespace std;
typedef long long LL;
const int N = 1000003;
int n, w, l, a[N], p, q[N], front, rear;
LL all, ans[N];
int main(){
scanf("%d%d", &n, &w);
for(Rint i = 1;i <= n;i ++){
scanf("%d", &l); p = 1;
for(Rint j = 1;j <= l;j ++){
scanf("%d", a + j);
if(a[j] > a[p]) p = j;
}
if(a[p] < 0){
if(w >= 2 * l) continue;
int tmp = w - l; front = rear = 0;
for(Rint i = 1;i <= tmp;i ++){
while(front < rear && a[q[rear - 1]] <= a[i]) -- rear;
q[rear ++] = i;
}
for(Rint i = tmp + 1;i <= l;i ++){
while(front < rear && q[front] < i - tmp) ++ front;
while(front < rear && a[q[rear - 1]] <= a[i]) -- rear;
q[rear ++] = i;
ans[i] -= a[q[front]];
}
continue;
}
all += a[p];
int tmp = w - l; front = rear = 0;
for(Rint i = 1;i <= p - 1;i ++){
while(front < rear && q[front] < i - tmp) ++ front;
while(front < rear && a[q[rear - 1]] <= a[i]) -- rear;
q[rear ++] = i;
if(i <= tmp) ans[i] += min(a[p], a[p] - a[q[front]]);
else ans[i] += a[p] - a[q[front]];
}
front = rear = 0;
for(Rint i = w;i > p + tmp;i --){
while(front < rear && q[front] > i) ++ front;
while(front < rear && a[q[rear - 1]] <= a[i - tmp]) -- rear;
q[rear ++] = i - tmp;
if(i > l) ans[i] += min(a[p], a[p] - a[q[front]]);
else ans[i] += a[p] - a[q[front]];
}
}
for(Rint i = 1;i <= w;i ++)
printf("%I64d ", all - ans[i]);
}

C Magic Grid

将所有数按照\(x>>4\)分类,填进\(\frac{n}{4}\times \frac{n}{4}\)的矩阵中,一类的\(16\)个数填进一个方格,每个方格是样例1的矩阵。这样在\(8|n\)的时候每行每列为0,否则每行每列为13.

F Bits And Pieces

首先固定\(a_i\),然后从高位到低位试答案,这一位可以填1当且仅当\(a_i\)的这一位为1或者是当前答案\(x\)的超集在\(a_i\)右边至少有两个数。

考虑预处理出\(x\)的超集的最靠右的两个下标。这个可以用FMT做,具体就是对每个\([0,2^{21})\)的数维护一个pair,维护值为\(x\)的最靠右的两个下标。然后把FMT的加法改成合并pair运算(将一个pair的两个数加进另一个pair)就可以了。之后上面的条件就可以轻松判断了。

时间复杂度\(O((n+m)\log m)\)

G Polygons

首先我们知道,肯定要固定一个点,所有的正多边形都要用这个点。

其次,如果填了一个正\(x\)边形,那么\(x\)的所有约数的正多边形也要填入。且相对于\(x\)的所有的约数(不含\(x\))的正多边形,正\(x\)边形要多用\(\varphi(x)\)个点。所以考虑按照\([1,n]\)的所有\(\varphi\)值排序,然后取最小的\(k\)个,同时我们知道\(d|x\)则\(\varphi(d)\le \varphi(x)\),所以满足这个条件。

注意判掉正1边形和正2边形。时间复杂度\(O(n\log n)\)。

H Red Blue Tree

此题过 ♂ 难,只会膜倒数2min切掉这题的tourist.

Codefest 2019 比赛总结的更多相关文章

  1. 2019/4/22 拓扑排序的高效写法. 模板题HDU1285:确定比赛名次

    传送门 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现 ...

  2. 【codeforces】【比赛题解】#855 Codefest 17

    神秘比赛,以<哈利波特>为主题……有点难. C题我熬夜切终于是写出来了,可惜比赛结束了,气啊. 比赛链接:点我. [A]汤姆·里德尔的日记 题意: 哈利波特正在摧毁神秘人的分灵体(魂器). ...

  3. 纪中OJ 2019.02.15【NOIP提高组】模拟 B 组 梦回三国 比赛题解(第一个)

    声明 旁边的同学小 H(胡)对我说: “哟,比赛拿了 140,强!要知道,如果哥第三题 AC 了,哥就 230 了,你个废柴!!!(比赛实际分数 130 额呵)” 顿时,千万草泥马从我心中奔腾而过:你 ...

  4. 2019年GPLT L2-1 特立独行的幸福 比赛题解 中国高校计算机大赛-团体程序设计天梯赛题解

    对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...

  5. 2019年GPLT L2-4 彩虹瓶 比赛题解 中国高校计算机大赛-团体程序设计天梯赛题解

    彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里. 假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N).现 ...

  6. 2019年GPLT L2-3 深入虎穴 比赛题解 中国高校计算机大赛-团体程序设计天梯赛题解

    著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...

  7. 2019 ICPC南昌邀请赛网络赛比赛过程及题解

    解题过程 中午吃饭比较晚,到机房lfw开始发各队的账号密码,byf开始读D题,shl电脑卡的要死,启动中...然后听到谁说A题过了好多,然后shl让blf读A题,A题blf一下就A了.然后lfw读完M ...

  8. 【比赛游记】(THUPC,CTS,APIO)2019四连爆蛋记

    5 月 11 日 坐飞机来到帝都,报道 THUPC. 试机题有皮配,不会. 晚上吃全聚德,喝星巴克.奢侈. 5 月 12 日 早上打 THUPC. 咕到 9 点半开始,到 2 点半结束.

  9. 2019招商银行M-Geeker线上比赛题解析

    目录 1. 最大子序和(变体) 2. 矩阵求乘积最大 3. 逐渐平均--值最大 目前已更新:第一题,第二题,第四题 1. 最大子序和(变体) 题目描述: 首先考虑常规的最大子序和的问题,即不能去掉中间 ...

随机推荐

  1. zabbix添加自定义监控(自动发现)遇到的问题

    问题:zabbix添加自动发现端口,提示Value should be a JSON object [root@localhost zabbix_agentd.d]# zabbix_get -s 19 ...

  2. linux 磁盘占用的排查流程

    Linux 服务器在使用过程中可能会遇到各种问题,其中之一就是"没有可用空间". 遇到这种情况,就需要进行排查,定位到消耗了磁盘的那个文件夹. 流程如下: 1. df -h df ...

  3. netty--使用注意事项

  4. Integer源码解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangyangzhizhou/article/details/77196626 概况 Java的In ...

  5. 微信小程序 swiper 组件坑

    swiper 组件高度被限制为150px了,所以内容无法撑开. 解决办法 给这组件重新设置个高度,然后在把里面的图片设置为自动适应容器大小.图片模式设置为 宽度不变 自动适应高度 <swiper ...

  6. js 单线程 异步

    线程与进程: 进程是系统资源分配和调度的单元.一个运行着的程序就对应一个进程.在windows中,每一个打开的运行的应用程序或后台程序,比如运行中的qq,谷歌浏览器,网易云音乐,资源管理器等都是一个进 ...

  7. vue动态请求到的多重数组循环遍历,取值问题,如果某个值存在则显示,不存在则不显示。

    数据结构: 需求:我在vue页面需要拿到url值并显示图片 代码写法: 注意:一定要判断否则拿到的large对象一直是空值, 那么img.large.url将会取不到值,会报 url  'undefi ...

  8. [ICCV 2019] Weakly Supervised Object Detection With Segmentation Collaboration

    新在ICCV上发的弱监督物体检测文章,偷偷高兴一下,贴出我的poster,最近有点忙,话不多说,欢迎交流- https://arxiv.org/pdf/1904.00551.pdf http://op ...

  9. Linux文件(夹)属性

    ll  或者 ls -lh 查看文件属性:

  10. Yarn介绍(设计理念与基本架构)

    Yarn : 新的计算框架,是一个全局资源管理器,负责整个集群的资源管理和分配   一. Yarn产生背景       Hadoop1.0MR有局限性,概括为以下几个方面 :  扩展性差 可靠性差 资 ...