字节跳动冬令营网络赛 Solution
A:Aloha
Unsolved.
B:Origami
Unsolved.
题意:
初始的时候有一张纸,可以从左边往右边折叠,或者从右边往左边折叠
每次折叠的长度不能超过现有宽度,最后折叠到长度为1
从上往下看会有一个$1-n的排列$,现在给出这个排列
问这个排列是否是合法折叠出来的
C:Continued Story
Unsolved.
题意:
有一个有根树,根为1,两个人轮流操作,每一次操作时选择一条边将其边权减一
如果某一次操作后对应的边的边权变为0,那么这条边会被移除
此时树会被分成两块,没有根的那块会被移除(根为1)
D:The Easiest One
Unsolved.
题意:
定义两种操作:
$x = x - 1$
$x = x - 2^i (当x AND 2^i != 0 时可以用)$
定义$f(x, y) 为 x 变成y 所需的最少操作数 此处(y <= x)$
求$\sum_{0 <= y <= x <= n} f(x, y)$
E:Set
Unsolved.
题意:
有n个集合,每个集合的大小都为m, 并且要满足$|S_i - S_{(i - 1 + n) mod n} | >= l_i$
现在要使得所有集合的并的元素个数最小,求最小的数量
F:Old Problem
Unsolved.
在$n x m 的矩形里 有 (n - 1) (m - 1) 个点,有有多少个三点能够组成直角三角形$
G:Periodic Palindrome
Unsolved.
H:Accel World
Unsolved.
I:Hello, Hello and Hello
Unsolved.
题意:
有一个字符串,当开始是 $000....111...222 这样的$
每一次可以选择其中一个子串把它放到后面,求最小的操作次数使得任意相邻的字符都不相同
无法做到输出-1
J:Sortable Path on Tree
Upsolved.
题意:
有一棵树,求存在多少个$pair(u, v) 使得u ->v 的简单路径上所有点按顺序组成的点权序列$
使得存在一个起点,使得从这个起点开始往后是一个非递减序列,(可以看作一个环此时)
思路:
点分治
我们将一个序列用大于号和小于号串起来
$这样对于某种符号数>=2的,直接视为2$
$那么只有9种状态来表示一个点$
$在对每棵子树分治的时候我们只需要考虑如何拼接形态即可$
#include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 100010
int t, n;
int w[N];
vector <int> G[N];
ll res; struct BIT
{
int a[N];
void init() { memset(a, , sizeof a); }
void update(int x, int val)
{
for (; x <= ; x += x & -x)
a[x] += val;
}
int query(int x)
{
int res = ;
for (; x > ; x -= x & -x)
res += a[x];
return res;
}
int query(int l, int r) { if (r < l) return ; return query(r) - query(l - ); }
}bit[][]; int vis[N];
int root, sum, sze[N], f[N];
void getroot(int u, int fa)
{
sze[u] = , f[u] = ;
for (auto v : G[u]) if (v != fa && !vis[v])
{
getroot(v, u);
sze[u] += sze[v];
f[u] = max(f[u], sze[v]);
}
f[u] = max(f[u], sum - sze[u]);
if (f[u] < f[root]) root = u;
} int big[N], small[N];
void getdeep(int u, int fa)
{
if (big[u] > ) big[u] = ;
if (small[u] > ) small[u] = ;
int x = big[u], y = small[u];
for (int i = ; i <= ; ++i)
for (int j = ; j <= ; ++j)
{
int nx = x + i;
int ny = y + j;
if (nx >= && ny >= ) continue;
if (!nx || !ny || (nx == && ny == )) res += bit[i][j].query();
else if (nx == ) res += bit[i][j].query(, w[u]);
else if (ny == ) res += bit[i][j].query(w[u], );
}
for (auto v : G[u]) if (v != fa && !vis[v])
{
big[v] = big[u] + (w[v] > w[u]);
small[v] = small[u] + (w[v] < w[u]);
getdeep(v, u);
}
} void add(int u, int fa, int flag)
{
bit[small[u]][big[u]].update(w[u], flag);
for (auto v : G[u]) if (v != fa && !vis[v])
add(v, u, flag);
} void solve(int u)
{
vis[u] = ;
bit[][].update(w[u], );
for (auto v : G[u]) if (!vis[v])
{
big[v] = (w[v] > w[u]);
small[v] = (w[v] < w[u]);
getdeep(v, u);
add(v, u, );
}
for (auto v : G[u]) if (!vis[v]) add(v, u, -);
bit[][].update(w[u], -);
for (auto v : G[u]) if (!vis[v])
{
sum = f[] = sze[v]; root = ;
getroot(v, );
solve(root);
}
} int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
for (int i = ; i <= n; ++i) G[i].clear(), vis[i] = ;
for (int i = ; i <= n; ++i) scanf("%d", w + i);
for (int i = , u, v; i < n; ++i)
{
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
res = ;
sum = f[] = n; root = ;
getroot(, );
solve(root);
printf("%lld\n", res + n);
}
return ;
}
字节跳动冬令营网络赛 Solution的更多相关文章
- 字节跳动冬令营网络赛 D.The Easiest One(贪心 数位DP)
题目链接 \(x:\ 11010011\) \(y:\ 10011110\) (下标是从高位往低位,依次是\(1,2,...,n\)) 比如对于这两个数,先找到最高的满足\(x\)是\(0\),\(y ...
- 牛客网字节跳动冬令营网络赛J Sortable Path on Tree —— 点分治
题目:https://ac.nowcoder.com/acm/contest/296/J 用点分治: 记录了值起伏的形态,二元组 (x,y) 表示有 x 个小于号,y 个大于号: 因为小于号和大于号都 ...
- 2019字节跳动冬令营day7娱乐赛19题题解
啊没去听讲题,也没发纸质题解,电子版题解也没有 为最后几个unsolve自闭了一段时间才全都A掉 3个队友写的我没看的题通过人数蛮多就不管了 题目地址:https://pan.baidu.com/s/ ...
- 字节跳动在 Go 网络库上的实践
https://mp.weixin.qq.com/s/wSaJYg-HqnYY4SdLA2Zzaw RPC 框架作为研发体系中重要的一环,承载了几乎所有的服务流量.本文将简单介绍字节跳动自研网络库 n ...
- 2018 ICPC 沈阳网络赛
2018 ICPC 沈阳网络赛 Call of Accepted 题目描述:求一个算式的最大值与最小值. solution 按普通算式计算方法做,只不过要同时记住最大值和最小值而已. Convex H ...
- 2018 ICPC 徐州网络赛
2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution ...
- 2018 CCPC网络赛
2018 CCPC网络赛 Buy and Resell 题目描述:有一种物品,在\(n\)个地点的价格为\(a_i\),现在一次经过这\(n\)个地点,在每个地点可以买一个这样的物品,也可以卖出一个物 ...
- 2018ICPC南京网络赛
2018ICPC南京网络赛 A. An Olympian Math Problem 题目描述:求\(\sum_{i=1}^{n} i\times i! \%n\) solution \[(n-1) \ ...
- HDU 6464.免费送气球-动态开点-权值线段树(序列中第first小至第second小的数值之和)(感觉就是只有一个状态的主席树) (“字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛)
免费送气球 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
随机推荐
- Emulator Error: Could not load OpenGLES emulation library: Could not load DLL!
Copy the file below from SDK\tools\lib to SDK\tools. libEGL_translator.dlllibGLES_CM_translator.dlll ...
- hadoop程序MapReduce之SingletonTableJoin
需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出: ...
- Java fluent风格
写个简单的例子,相信看了下面的例子,就会了解什么是fluent风格. 一.我们先写一个通常的,即不使用fluent风格 1.实体类 package com.xbq.demo.stu; /** * @C ...
- ELK5.X使用X-Pack配置密码
一.前言 前面使用ELK5.X+logback搭建日志平台,但是,当访问kibana 时,直接就可以访问了,如果设置登录名和密码,是不是更好呢?答案是肯定的,这里使用X-Pack来配置登录名和密码. ...
- 使用rlwrap调用sqlplus中历史命令
此文来自http://www.cnblogs.com/mchina/archive/2013/03/08/2934473.html 在此谢谢原创作者. 在Linux中运行SQL*Plus,不能调用历史 ...
- 使用jq的ajax实现对xml文件的读取
之前一直在用json来传递数据,但是xml也是不可缺少的,于是开始了xml的征程.xml的一些属性啊之类的在菜鸟教程上列举的已经很详细了,但是却没有前段部分的获取教程,查询资料,遂懂: index.x ...
- cocos2dx游戏--欢欢英雄传说--添加动作
添加完人物之后接着给人物添加上动作.我们为hero添加4个动作:attack(由3张图片构成),walk(由2张图片构成),hit(由1张图片构成),dead(由1张图片构成):同样,为enemy添加 ...
- PHP之变量范围
前面的话 变量范围即它定义的上下文背景(也就是它的生效范围).在javascript中,并没有变量范围这一概念,相似的可能是作用域.但是,由于javscript使用的是词法作用域,指变量声明时的位置: ...
- c++ 引用底层实现
红色是我添加的,其他地方是原作者的. 主要是看了上面的这篇“从底层汇编理解 c++ 引用实现机制“的文章之后,觉得不错.就转了过来,同时,对文中的程序都在自己的机器上验证了一下. 使用的G++版本:g ...
- CSS-用伪元素制作小箭头(轮播图的左右切换btn)
先上学习地址:http://www.htmleaf.com/Demo/201610234136.html 作者对轮播图左右按钮的处理方法一改往常,不是简单地用btn.prev+btn.next的图片代 ...