2018 Petrozavodsk Winter Camp, Yandex Cup
A. Ability Draft
solved by RDC 60min start, 148 min AC, 1Y
题意:两只 Dota 队伍,每队 \(n\) 个英雄,英雄一开始无技能,他们需要按照给定的顺序在技能池中选技能,每个英雄需要恰选择 \(s\) 个普通技能 和 1 个终极技能,每个技能有强度值,双方都想最大化己方和对方强度值之差,双方都是明智的。
做法:注意到,每个英雄,要么选择最强的终极技能要么选择最强普通技能。考虑 DP,用 \(f[x][mask_1][mask_2]\) 表示,还有 \(x\) 个人没选技能,队伍 A 中 \(mask_1\) 中的人获得了终极技能,队伍 B 中 \(mask_2\) 中的人获得了终极技能,在此情况下队伍 A 和队伍 B 的极大分差。考虑到 \(f[x][mask_1][mask_2]\) 的转移,我们对拿终极技能还是普通技能进行决策,即可转移到 \(f[x+1][?][?]\)
C. Block, Stock and Two Smoking Galaxy Notes
solved by F0_0H 20min start, 57 min AC, 1Y
题意:(签到题)给定一个简单图,要求选定一个点为King,并且其他\(n-1\)个点有一个划分,使得每个点所属块的大小为1或2,并且满足每个块内联通,且至少存在一个点与King有边
做法:枚举King(\(度数 \geq \frac{n}{2}\)),然后对于其他\(n-1\)个点根据是否与King有边相连构建二分图,跑一遍匈牙利判断每个点是否有着落,如果可以,输出
F. Shuffle
solved by sdcgvhgj 267min AC, +4
题意 定义操作\(shuffle(s) = s_1s_3...s_{n-1}s_2s_4...s_n\),问最少进行多少次操作把s变换到t
做法 把此置换分成若干个独立的循环,设第i个循环把s变换到t的最小步数为\(a_i\),把t变换到t的最小步数为\(m_i\),于是有 \(ans\%m_i=a_i\),于是用KMP求出\(a_i\)和\(m_i\)再用扩展中国剩余定理求出ans即可。
证明:考虑第i个循环,
1.若用n步能从t变换到t,则一定有\(m_i|n\),若不满足,设\(x=n\%m_i\),则x步也可以从t变换到t,且\(x<m_i\),矛盾。(离散里群的最小生成元?)
2.若用n步能从s变换到t,那么可以看成先用\(a_i\)步从s变换到t,再用\(n-a_i\)步从t变换到t,于是 \(n\%m_i=a_i\)
G. Piecewise Linearity
solved by sdcgvhgj 117min AC, +1
题意 给一条折线,问能不能用\(f(x)=\sum_{i=1}^m\lambda_i|x-a_i|\)形状的函数来表示
做法 对于折线第i个点,有\(\lambda_i=(右侧斜率-左侧斜率)/2\),所以\(f(x)\)就确定了,判断是否满足即可。注意除斜率条件还有截距条件。
H. Sketch
solved by RDC 213min start, 256 min AC, +4
题意 构造长度为 \(n\) 的序列 \(b[]\), \(1\leq b_i \leq m\),LIS 为 \(k\),对于 \(1\leq i \leq k\)若 \(a_i \neq -1\),长度为 \(i\) 的不降子序列结尾元素极小值为 \(a_i\)。
做法 考虑没有 -1 的 case,有解的一个必要条件是 \(a_i\) 不降,先不考虑长度为 \(n\) 的限制,那么有
- 我们可以构造长度为 \(k\) 的序列,且 \(k\) 是下界。
- 在序列中,\([a_k,m+1)\) 中的每个元素至多出现 \(k\) 次,\([a_{k-1},a_k)\) 中的每个元素至多出现 \(k-1\) 次 ..... \([a_1,a_2)\) 中的每个元素至多出现 1 次,根据这个性质,序列长度存在一个上界 \((a_2-a_1)+2*(a_3-a_2)+....+k*(m+1-a_k)\) = \(k*(m+1) - \sum_{i=1}^{k}a_i\)
构造方法:
- 写下序列 \([a_1,a_2,a_3,....,a_k]\)
- 在序列前添上,\([1个a_2,1个a_2-1,.....,1个a_1+1]\)
- 在序列前添上,\([2个a_3,2个a_3-1,.....,2个a_2+1]\)
- 在序列前添上,\([3个a_4,3个a_4-1,.....,3个a_3+1]\)
以此类推,因此我们证明了,下界到上界中的每个长度都是可以构造出来的。【介值定理既视感】
考虑有 -1 的 Cas,我们贪心地给 \(a_i=-1\) 的位置赋值使得上界极大即可。
I. Piecewise Linearity
upsolved by sdcgvhgj
题意 n个大小为k的栈,每次给你栈顶元素,你输出x,它将栈顶>=x或<=x的元素pop出来,在50次以内把栈清空
做法 按栈的剩余个数越多优先级越高的想法,每次按栈顶元素排序,选一个位置使左边和右边的\(\sum size(i)\)尽可能接近,WA,改成使\(\sum 2^{size(i)}\)尽可能接近,AC。
K. Hiding a Tree
solved by sdcgvhgj 40min start, 64min AC, +2
题意 给定一棵树,并且其中某些节点可以将其编号改为\([1,1e9]\)的任意值,两节点编号不能相同,你需要使序列 \(n,u_1,v_1,u_2,v_2...u_n,v_n\)异或和为0
做法 只有度数为奇数的点的标号会影响异或和,对这样的点的个数进行讨论即可。注意一个点时如果需要改成的标号冲突但那个点可以进行修改也是可以的,有两个点但需要这两个点标号相等是不可以的,大于两个点一定可以
2018 Petrozavodsk Winter Camp, Yandex Cup的更多相关文章
- 2019 Petrozavodsk Winter Camp, Yandex Cup C. Diverse Singing 上下界网络流
建图一共建四层 第一层为N个歌手 第二层为{pi,li} 第三层为{si,li} 第四层为M首歌 除了S和第一层与第三层与T之间的边为[1,INF] 其他边均为[0,1] #include<bi ...
- Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet
一个地图上有若干障碍,问允许出现一个障碍的最大子矩形为多大? 最大子矩形改编 #include<bits/stdc++.h> using namespace std; #define re ...
- Petrozavodsk Winter Camp, Day 8, 2014, Ship
$dp(i,j)$表示i-j这段还没运走时的状态,包括 运输了多少次,还剩多少空间 每次枚举运输左边还是右边转移 #include <bits/stdc++.h> #define rep( ...
- Petrozavodsk Winter Camp, Day 8, 2014, Fine Brochures
1的个数-块的个数+多减的个数+flag 多减的只会在一个循环末尾出现 #include <bits/stdc++.h> using namespace std; #define rep( ...
- Petrozavodsk Winter Camp, Day 8, 2014, Second Trip
给你一棵树,每次询问一个(a,b),问有多少有路径与a-b没有交集 找lca #include <bits/stdc++.h> using namespace std; #define r ...
- Petrozavodsk Winter Camp, Day 8, 2014, Mosaic
给你三个数字a,b,c,让你用1-m的数字凑出来 结论:有2个1和2个2肯定凑不出来,然后就搜索 #include <bits/stdc++.h> using namespace std; ...
- Petrozavodsk Winter Camp, Day 8, 2014, Rectangle Count
给一个n*m的格点图,问其中有多少个矩形? $ \sum_{x=1}^{nm} \sum_{ab=x} [a + b \leq n](n - a - b + 1)\sum_{cd=x} [c + d ...
- Petrozavodsk Winter Camp, Andrew, 2014, Dichromatic Trees
条件: 1:每个红色节点的儿子都是黑色节点 2.每个叶子到根路径上的黑点数相等,等于某个常数,称作树的black height 求给定black height和节点数的符合条件的方案数 $black_ ...
- Petrozavodsk Winter Camp, Andrew, 2014, Bipartite Bicolored Graphs
由i个点和j个点组成的二分图个数为 $3^{ij}$,减去不联通的部分得到得到由i,j个点组成的联通二分图个数 $g_{i,j} = 3_{ij} - \sum_{k=1}^i \sum_{l=0}^ ...
随机推荐
- 基于ReentrantLock的非公平锁理解AQS
AQS AQS概述 AbstractQueuedSynchronizer抽象队列同步器简称AQS,它是实现同步器的基础组件,juc下面Lock的实现以及一些并发工具类就是通过AQS来实现的,这里我 ...
- iOS Xcode6 新建OC Category文件
首先:File -> New File 接下来界面如下,选择Objective-C File,然后Next 在这里选择 Category 即可
- QTableView表格控件区域选择-自绘选择区域
目录 一.开心一刻 二.概述 三.效果展示 四.实现思路 1.绘制区域 2.绘制边框 3.绘制 五.相关文章 原文链接:QTableView表格控件区域选择-自绘选择区域 一.开心一刻 陪完客户回到家 ...
- host配置
host添加地址 今天是我第一天入职,坐到工位的第一件事就是配置host,因为连接测试环境需要本地授权,所以要配置.这里简单记录下配置中遇到的问题和操作的步骤 操作环境是win10,之前公司一直使用的 ...
- oracle实战(一)
一.表空间的创建以及删除 声明:此操作环境为windows,oracle10G 表空间? ORACLE数据库的逻辑单元. 数据库---表空间 一个表空间可以与多个数据文件(物理结构)关联 一个数据库下 ...
- JAVA课堂-动手动脑1
一.Enum:一般用来表示一组相同类型的常量.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals,枚举对象里面的值都必须是唯一的. 代码: public ...
- Unity经典游戏教程之:弓之骑士
版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...
- C语言编程学习打造——做题游戏
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 【算法】【排序】【交换类】快速排序QuickSort
#include<stdio.h> //快速排序 int main(){ ,,,,,,,,}; +; //基准指针 ; //慢指针 int* j=a; //快指针 int QS(int* ...
- Lua语言学习
1,语法 语句不用分号结尾 function ... end if .. else .. end 2, io库, string库, table库, OS库, 算术库, debug库 3, dofile ...