Petrozavodsk Summer Training Camp 2017
Petrozavodsk Summer Training Camp 2017
Problem A. Connectivity
题目描述:有\(n\)个点,现不断地加边。每条边有一种颜色,如果一个点对\((a, b)\),满足\(a=b\)或对于每一种颜色的子图(图中只有该种颜色的边),\(a, b\)总是连通,则该点对称为好连通。求出每加一条边,好连通的点对数。
solution
每个子图用并查集维护连通块,并且用\(vector\)记录每个连通块的点,便于之后进行答案的统计,合并时启发式合并即可。
每种颜色生成一个\(hash\)值,每个点记录一个\(hash\)值,表示在每个子图中是属于哪个并查集,若两个点的\(hash\)值相同,则认为它们是好连通。
时间复杂度:\(O(mlogn)\)(常数比较大)
Problem B. Hotter-colder
Problem C. Painting
题目描述:有连续\(n\)个,每个点开始时都没有颜色,现在每次选择一个连续的区间,然后将这个区间涂成一种颜色,使得最终变成目标的样子。颜色有\(m\)种,每种颜色至少出现一次,涂色也只能涂\(m\)次,每次涂色的花费为区间长度。问总花费的最大值。
solution
可以先预处理出每种颜色的最小涂色区间,由于数据的特殊性,这些区间是不相交的,只可能是相离或包含。这样就可以按嵌套关系将区间分成很多层,必须先涂外层,再涂内层。对于同一层的区间,再分成很多段,每一段是连续的相邻的区间,每一段用\(dp\)来确定如何涂色,答案就是全部加起来的值。
时间复杂度:\(O(n^2)\)
Problem D. Ones
题目描述:定义一种1-expressions \(E ::= 1 | E+E | E*E | (E+E) | (E*E)\),给出一个数\(k\),用一个不多于\(100\)个\(1\)的表达式,使得答案为\(k\)。
solution
偶数时除于二,奇数时减一。
时间复杂度:\(O(logk)\)(每次询问)
Problem E. Seats
Problem F. Ants
Problem G. Permutation
题目描述:给出一个\(n\)排列\(p_i\),将其分成两个子序列,使得一个子序列递增,另一个递减。或无解。
solution
贪心。假设枚举到第\(i\)个数,如果\(p_i\)小于递增序列最后一个数,则扔进递减序列,若大于递减序列最后一个数,则扔进递增序列,若两个条件都满足,则无解。如果是介于两者之间,则考虑\(p_{i+1}\),若\(p_{i+1}>p_i\),则扔进递增序列,否则扔进递减序列。
时间复杂度:\(O(n)\)(每次询问)
Problem H. Primes
题目描述:定义\(\pi (x, y)\)表示能同时整除\(x, y\)的质数个数。给出\((a, b)\),求出\(\sum_{a \leq x < y \leq b} \pi(x, y)\)
solution
答案为\(\sum_{d} \left \lfloor \frac{b}{d} \right \rfloor - \left \lfloor \frac{a-1}{d} \right \rfloor\),\(d\)为质数。然后其实对于不同的\(d\),里面的值也可能一样,可以将值一样的\(d\)一起算,也就是跳着跳着算。
时间复杂度:\(O(log^2n)\) (每次询问)
Problem I. Vertex covers
Problem J. Scheduling
题目描述:有\(m\)个线程,有\(n\)个需要执行的程序,每个程序需要在时刻\(p_i\)到\(k_i\)内执行,执行时间为\(c_i\),每条程序可以随意暂停,跳转线程,但同一线程同一时刻只能执行一条程序。问是否能执行所有程序。
solution
将时刻拆分成若干个区间,每个区间连向汇点,流量为区间长度,每个程序连向源点,流量为程序的执行时间,然后每个程序连向所在的区间。跑一遍网络流就可以了。
时间复杂度:\(O(n^2m)\)
Problem K. Shufe
题目描述:有\(2^n\)张牌,有一种洗牌的方法:1、如果只有两张牌,则交换它们。2、将牌分成上下两堆,交换两堆牌,然后每堆牌递归操作。问洗\(t\)次牌后的顺序。
solution
显然,洗一次牌后所有牌会调转,再洗一次就会变回原样。
时间复杂度:\(O(2^n)\)
Petrozavodsk Summer Training Camp 2017的更多相关文章
- Petrozavodsk Summer Training Camp 2017 Day 9
Petrozavodsk Summer Training Camp 2017 Day 9 Problem A. Building 题目描述:给出一棵树,在树上取出一条简单路径,使得该路径的最长上升子序 ...
- 【模拟退火】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem F. Factory
让你在平面上取一个点,使得其到给定的所有点的距离和最小. 就是“费马点”. 模拟退火……日后学习一下,这是从网上扒的,先存下. #include<iostream> #include< ...
- 【动态规划】【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem B. Dissertation
题意: 给定S1串,长度100w,S2串,长度1k.问它俩的LCS. f(i,j)表示S2串前i个字符,LCS为j时,最少需要的S1串的前缀长度.转移的时候,枚举下一个字符在S1的位置即可.(可以预处 ...
- 【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem A. The Catcher in the Rye
一个区域,垂直分成三块,每块有一个速度限制,问你从左下角跑到右上角的最短时间. 将区域看作三块折射率不同的介质,可以证明,按照光路跑时间最短. 于是可以二分第一个入射角,此时可以推出射到最右侧边界上的 ...
- 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】
2015 UESTC Winter Training #7 2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest 据 ...
- 2015-2016 Petrozavodsk Winter Training Camp, Nizhny Novgorod SU Contest (5/9)
2015-2016 Petrozavodsk Winter Training Camp, Nizhny Novgorod SU Contest B. Forcefield 题意 给你一维平面上n个镜子 ...
- Petrozavodsk Winter Training Camp 2018
Petrozavodsk Winter Training Camp 2018 Problem A. Mines 题目描述:有\(n\)个炸弹放在\(x\)轴上,第\(i\)个位置为\(p_i\),爆炸 ...
- 2014-2015 Petrozavodsk Winter Training Camp, Contest.58 (Makoto rng_58 Soejima contest)
2014-2015 Petrozavodsk Winter Training Camp, Contest.58 (Makoto rng_58 Soejima contest) Problem A. M ...
- 【推导】【数学期望】【冒泡排序】Petrozavodsk Winter Training Camp 2018 Day 5: Grand Prix of Korea, Sunday, February 4, 2018 Problem C. Earthquake
题意:两地之间有n条不相交路径,第i条路径由a[i]座桥组成,每座桥有一个损坏概率,让你确定一个对所有桥的检测顺序,使得检测所需的总期望次数最小. 首先,显然检测的时候,是一条路径一条路径地检测,跳跃 ...
随机推荐
- Android四大组件之Activity & Fragement(续)
1.Activity和Fragment的异同. Activity是UI界面交互的主体,而fragment是这个主体上的元素. 一个activity可以包含0到n个fragment. fragment可 ...
- Command Network OpenJ_Bailian - 3436(最小有向生成树模板题)
链接: http://poj.org/problem?id=3164 题目: Command Network Time Limit: 1000MS Memory Limit: 131072K To ...
- Android 通过浏览器打开应用
在很多应用的web站,其实都有这样一个功能,就是直接在网页中打开应用,接下来的就来探讨一下这个功能的实现,有些地方也我还没弄明白,还请懂的大神指点. 首先,得说一点不好消息,在微信中,这样的方式是行不 ...
- 洛谷 P3345 [ZJOI2015]幻想乡战略游戏 解题报告
P3345 [ZJOI2015]幻想乡战略游戏 题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做 ...
- Linux 查询命令
which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 (find也 ...
- 简述this,call,apply,bind之间的关系
一.什么是this? this是JavaScript语言的一个关键字,它是函数运行时在函数体内部自动生成的一个对象,只能在函数体内部使用.函数的不同使用场合,this的指向不同. 在ES5中,this ...
- 弄清楚CSS的匹配原理让你写出高效的CSS
用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知道你是否也跟我一样?看1个简单的CSS: DIV#divBox p span.red{color:red;} 按习惯我们对这个CSS 的理解是 ...
- 2018-2019 ACM-ICPC 焦作赛区 部分题解
题目链接:https://codeforces.com/gym/102028 B. Ultraman vs. Aodzilla and Bodzilla 题意: 两只怪兽,它们的生命和攻击分别为hpA ...
- Python基础之面向对象(初级篇)
概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...
- linux 查看登录日志
原文:http://www.cnblogs.com/wangkangluo1/archive/2011/09/23/2185976.html linux查看日志: # cd /var/log # le ...