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)\)

原文地址:https://www.cnblogs.com/GerynOhenz/p/8637875.html

时间: 2024-10-06 10:16:34

Petrozavodsk Summer Training Camp 2017的相关文章

【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem A. The Catcher in the Rye

一个区域,垂直分成三块,每块有一个速度限制,问你从左下角跑到右上角的最短时间. 将区域看作三块折射率不同的介质,可以证明,按照光路跑时间最短. 于是可以二分第一个入射角,此时可以推出射到最右侧边界上的位置,看什么时候恰好射到右上角即可. 这份sb代码貌似挂精度了. #include<cstdio> #include<iostream> #include<cmath> using namespace std; #define EPS 0.0000000001 int T,

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 据说这套题写出3题就是金牌水平了... Problem D. Group Stage 足球比赛,现在有n(2<= n <=100)支球队.要从中选拔m(1<= m <=n-1)支球队,每支球队互相比赛一场,即比赛n*(n-1)/2场,胜者得3分,平局各得1分.最后从大到小列出排名,如果有

【博弈论】【SG函数】【线段树】Petrozavodsk Summer Training Camp 2016 Day 9: AtCoder Japanese Problems Selection, Thursday, September 1, 2016 Problem H. Cups and Beans

一开始有n个杯子,每个杯子里有一些豆子,两个人轮流操作,每次只能将一个豆子移动到其所在杯子之前的某个杯子里,不过可以移动到的范围只有一段区间.问你是否先手必胜. 一个杯子里的豆子全都等价的,因为sg函数是异或起来的值,所以一个杯子里如果有偶数个豆子,就没有意义. 用sg(i)表示i杯子中的豆子的sg值,sg(i)就是其所能移动到的那段杯子的区间的sg值的mex(未出现的最小非负整数).可以用线段树去做.是经典问题. 由于每次看似是后缀询问,实则是全局询问,故而主席树完全是多余的. 回顾一下区间m

【计算几何】【极角排序】【二分】Petrozavodsk Summer Training Camp 2016 Day 6: Warsaw U Contest, XVI Open Cup Onsite, Sunday, August 28, 2016 Problem J. Triangles

平面上给你n(不超过2000)个点,问你能构成多少个面积在[A,B]之间的Rt三角形. 枚举每个点作为直角顶点,对其他点极角排序,同方向的按长度排序,然后依次枚举每个向量,与其对应的另一条直角边是单调的,可以用一个pointer做出来,然后可以得出那些同方向的向量的区间(这个代码好像有点问题,可能会退化,最好确定了一个LL之后,对一个方向的不要重复算RR.这里如果也改成二分就比较好,复杂度不会退化).然后通过二分可以得到A使得面积在[A,B]间的有哪些(其实这个因为也是单调的,好像也没必要二分,

【线段树】【扫描线】Petrozavodsk Winter Training Camp 2018 Day 5: Grand Prix of Korea, Sunday, February 4, 2018 Problem A. Donut

题意:平面上n个点,每个点带有一个或正或负的权值,让你在平面上放一个内边长为2l,外边长为2r的正方形框,问你最大能圈出来的权值和是多少? 容易推出,能框到每个点的 框中心 的范围也是一个以该点为中心的相同大小的框. 于是,把每个点的框拆成4条线.从下往上扫过去,最下面的线,给[R,R]区间加上该点的权值,然后上面再给[L,L]减去,然后上面再给[L,L]加上,然后再往上在给[R,R]减去即可.每次扫完一行,就用线段树的全局最大值尝试更新答案. 两个坑点:首先,由于线段树里存储的是离散后的点,所

Petrozavodsk Summer Training Camp 2016H(多标记线段树)题解

题意: \(n\)个草,第\(0\)天种下,高度都为\(0\),每个草每天长高\(a_i\).现给出\(q\)询问,每次给出第\(b\)天,然后把高于\(d\)的全削成\(d\),每次问你削下来的高度是多少. 思路: 能看出草的顺序和答案无关,那么按\(a_i\)排序,后面的草永远都比前面的高.然后线段树维护区间加,区间重置,区间询问. 代码: #include<set> #include<map> #include<cmath> #include<queue&g

2015-2016 Petrozavodsk Winter Training Camp, Makoto rng_58 Soejima Сontest 4题解

传送门 被\(jz\)姐姐带着飞--代码的话直接在上面找吧 \(A\) 发现这样的数不会很多,直接把所有的都打表打出来就行了 \(B\) 转换成切比雪夫距离后,每个点分别向\(x,y\)坐标最大最小的点连边,跑个最大生成树就行了 \(C\) 最终的柿子一定行如\(s\pm t=2a_{i_1}-2a_{i_2}+...\),那么直接\(bfs\)出所有可能的结果,然后根据奇偶性判断一下就行了 原文地址:https://www.cnblogs.com/yuanquming/p/11715366.h

湖南省第十三届大学生计算机程序设计竞赛 Football Training Camp 贪心

2007: Football Training Camp[原创-转载请说明] Submit Page   Summary   Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 228     Solved: 30 Description 在一次足球联合训练中一共有n支队伍相互进行了若干场比赛. 对于每场比赛,赢了的队伍得3分,输了的队伍不得分,如果为平局则两支队伍各得1分. Input 输入包含不超过1000组数据. 每组数据的第

D. Marcin and Training Camp

题目链接:http://codeforces.com/contest/1230/problem/D D. Marcin and Training Camp time limit per test: 3 seconds memory limit per test: 256 megabytes input: standard input output: standard output 题目大意: 要组建一个小组,要求小组中每个人都不比所有人强,当一个人懂得一个算法但是另一个不懂那么前者认为他比后者强