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. 最大子序和(变体) 题目描述: 首先考虑常规的最大子序和的问题,即不能去掉中间 ...
随机推荐
- Qt:用 __thread 关键字让每个线程有自己的全局变量
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/wsj18808050/article/d ...
- 解决SVN蓝色问号的问题
桌面或文件夹右键,选择TortoiseSVN->Settings打开设置对话框,选择Icon Overlays->Overlay Handlers->取消钩选Unversioned. ...
- MySQL多表关联查询数量
//多表关联查询数量select user, t1.count1, t2.count2from user tleft join ( select user_id, count(sport_type) ...
- 用.net4中的DynamicObject实现简单AOP
public class DynamicWrapper : DynamicObject { private readonly object source; public DynamicWrapper( ...
- 四、eureka服务端同步注册操作
所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 在eureka服务端注册服务一文中,我们提到register方法做了两件事 1)注册服务 ...
- HTML5页面介绍
1.<!DOCTYPE html> 文档声明:用于告诉浏览器使用html哪个版本的标准解析页面,此写法代表使用html5的标准去解析 2.<html> 根标签, ...
- day24-python之面向对象
1.面向对象 # name='元昊' # # gender='母' # # type='藏獒' #狗的特征 dog1={ 'name':'元昊', 'gender':'母', 'type':'藏獒' ...
- iOS开发常见的宏定义(实用)
iOS开发过程中使用一些常用的宏可以提高开发效率,提高代码的重用性:将这些宏放到一个头文件里然后再放到工程中的-Prefix.pch文件中(或者直接放到-Prefix.pch中)直接可以使用,灰常方便 ...
- FreeRTOS 任务创建和删除(动态)
TaskHandle_t taskhandle; TaskHandle_t taskhandle1; void vTask(void *t) { int i = 0; while(1) { i++; ...
- Python 使用 docopt 解析json参数文件
1. 背景 在深度学习的任务中,通常需要比较复杂的参数以及输入输出配置,比如需要不同的训练data,不同的模型,写入不同的log文件,输出到不同的文件夹以免混淆输出 常用的parser.add()方法 ...