Codefest 2019 比赛总结
蒟蒻的心路历程
上来看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 比赛总结的更多相关文章
- 2019/4/22 拓扑排序的高效写法. 模板题HDU1285:确定比赛名次
传送门 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现 ...
- 【codeforces】【比赛题解】#855 Codefest 17
神秘比赛,以<哈利波特>为主题……有点难. C题我熬夜切终于是写出来了,可惜比赛结束了,气啊. 比赛链接:点我. [A]汤姆·里德尔的日记 题意: 哈利波特正在摧毁神秘人的分灵体(魂器). ...
- 纪中OJ 2019.02.15【NOIP提高组】模拟 B 组 梦回三国 比赛题解(第一个)
声明 旁边的同学小 H(胡)对我说: “哟,比赛拿了 140,强!要知道,如果哥第三题 AC 了,哥就 230 了,你个废柴!!!(比赛实际分数 130 额呵)” 顿时,千万草泥马从我心中奔腾而过:你 ...
- 2019年GPLT L2-1 特立独行的幸福 比赛题解 中国高校计算机大赛-团体程序设计天梯赛题解
对一个十进制数的各位数字做一次平方和,称作一次迭代.如果一个十进制数能通过若干次迭代得到 1,就称该数为幸福数.1 是一个幸福数.此外,例如 19 经过 1 次迭代得到 82,2 次迭代后得到 68, ...
- 2019年GPLT L2-4 彩虹瓶 比赛题解 中国高校计算机大赛-团体程序设计天梯赛题解
彩虹瓶的制作过程(并不)是这样的:先把一大批空瓶铺放在装填场地上,然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里. 假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N).现 ...
- 2019年GPLT L2-3 深入虎穴 比赛题解 中国高校计算机大赛-团体程序设计天梯赛题解
著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报.已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门.每一扇门背后或者是一个房间,或者又有很多条路,同样是每条 ...
- 2019 ICPC南昌邀请赛网络赛比赛过程及题解
解题过程 中午吃饭比较晚,到机房lfw开始发各队的账号密码,byf开始读D题,shl电脑卡的要死,启动中...然后听到谁说A题过了好多,然后shl让blf读A题,A题blf一下就A了.然后lfw读完M ...
- 【比赛游记】(THUPC,CTS,APIO)2019四连爆蛋记
5 月 11 日 坐飞机来到帝都,报道 THUPC. 试机题有皮配,不会. 晚上吃全聚德,喝星巴克.奢侈. 5 月 12 日 早上打 THUPC. 咕到 9 点半开始,到 2 点半结束.
- 2019招商银行M-Geeker线上比赛题解析
目录 1. 最大子序和(变体) 2. 矩阵求乘积最大 3. 逐渐平均--值最大 目前已更新:第一题,第二题,第四题 1. 最大子序和(变体) 题目描述: 首先考虑常规的最大子序和的问题,即不能去掉中间 ...
随机推荐
- Istio流量管理能力介绍
1 Istio是什么? Istio 1.0版本于8月1号凌晨准点发布,核心特性已支持上生产环境,各大微信公众号.博客纷纷发文转载.那么Istio到底是什么?能解决问题什么? 1. Istio ...
- 2019年全国高校sql数据库
2019年全国高校名单sql数据库信息: 根据教育部发布的文件整理形成可用.sql文件,导入数据库即可使用. 包括全国高等学校共计2956所,其中:普通高等学校2688所(含独立学院257所),成人高 ...
- robot framework 怎么验证搜索无记录,页面元素不存在
假设你要验证搜索无记录,页面元素不存在,假设我搜索的文本为你好 页面展示为如下 搜索:你好 假设页面搜索有结果: 你好 class=vtext 你好1 class=vtext 你好2 class ...
- R_基础_01
R语言介绍:R是一种区分大小写的解释型语言.R中有多种数据类型,包括向量.矩阵.数据框(与数据集类似)以及列表(各种对象的集合),广泛用于数据统计. R的特点:一次交互式会话期间的所有数据对象都被保存 ...
- VBA While Wend循环
在While...Wend循环中,如果条件为True,则会执行所有语句,直到遇到Wend关键字. 如果条件为false,则退出循环,然后控件跳转到Wend关键字后面的下一个语句. 语法 以下是VBA中 ...
- python day3 int,str,list类型补充
目录 python day 3 1. int类小知识点 2. str类小知识点 3. list类小知识点 python day 3 (学习资料来自老男孩教育) 2019/10/06 1. int类小知 ...
- java包装类的自动装箱及缓存
首先看下面一段代码 public static void main(String[] args) { Integer a=1; Integer b=2; Integer c=3; Integer d= ...
- Vue 案例 列表动画实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ping IP 带时间戳循环显示并写入日志(windos版+linux版)
在工作中,判断网络是否通畅,首选命令就是ping,但有时候我们需要持续ping一个或多个地址时,需要加 -t 即可,但有时候需要在ping的时候加入时间戳并把ping记录写入到日志里面,方法如下: w ...
- python编码和解码
一.什么是编码 编码是指信息从一种形式或格式转换为另一种形式或格式的过程. 在计算机中,编码,简而言之,就是将人能够读懂的信息(通常称为明文)转换为计算机能够读懂的信息.众所周知,计算机能够读懂的是高 ...