首页 > 其他分享 >2015 北京省队集训

2015 北京省队集训

时间:2024-07-12 17:45:15浏览次数:20  
标签:10 le 最小 times key 2015 集训 省队 范围

2015 北京省队集训

Day 1

训练题

树的难题

给定 n 个点的边带权三色树(黑白灰),定义“均衡的”三色树为“不存在黑点”“只存在不超过 1 个白点”。
删掉一些边得到“均衡的”森林,最小化删掉的边权和。

数据范围 \(n\le 3*10^5\)

key:dp

\(f(u,op)\) 代表 u 子树合法,且 u 所在连通块满足条件 op,最小删掉的边权和,转移平凡。

秘密任务

给定 n 个点的边带权无向图,定义“逃跑路线”为从 1 到 n 的任意一条最短路。在边 (u,v) 上设置检查点,代价为 \(\min(a_u,a_v)\),当“逃跑路线”经过 (u,v) 时拦截成功。特别的,点 n 不能设置检查点。
可以设置任意多个检查点,最小化总代价,使选择任意“逃跑路线”,都可以拦截成功,并判断最优方案是否唯一。

数据范围 \(n\le 400, m\le 4000\)

key: 最短路图 + 最小割唯一性

  1. 求出 1 到 n 的最短路
  2. 保留在最短路上的边 (\(dis(1,u)+w(u,v)+dis(v,n)=dis(1,n)\))
  3. 求最小割
  4. 判断最小割是否唯一

    当且仅当所有必定出现的边权和等于最小割。
    引理:有向边(u, v)必定出现在任意最小割中,当且仅当在最终的残留网络中点 1 可达点 u,点 v 可达点 n。

数对统计

给定序列 \(\{A_n\}\),\(m\) 次询问 \((v,L,R)\),求满足 \([l,r] \subseteq [1,n],r-l+1\in [L,R],\forall j\in [l,r],A_j\ge v\) 的数对 \((l,r)\) 数量。

数据范围 \(n,m\le 3*10^5\),\(0\le A_i,v\le 1000\)

key: 离线排序 + 合并答案区间

对于单个 v,删去所有小于 v 的数后,序列分成若干个区间,合法答案一定包含在这些区间之中,计算平凡。

离线询问,按 v 从大到小排序,每次修改 v 相当于合并区间。

Day 2

训练题

冻结

给定平面上 n 个点,m 次询问求距离小于等于 \(R_i\) 的最大连通块。

数据范围 \(T\le 100,n\le 100 ,m\le 1000\)

key: 离线 + 并查集

把距离排序一下,瞎搞就行。

灵魂宝石

初始有 m 颗宝石,每天减少一颗宝石,没有宝石就会死。

现在有 n 个 boss,描述为 \((t_i,p_i,w_i)\)。
在第 \(t_i\) 天,可以打 boss,也可以不打。
若挑战:

  1. 失去一颗宝石
  2. \(p_i\) 的概率成功,获得 \(w_i\) 颗宝石(若当前宝石数大于 m,自动变成 m)
  3. \(1-p_i\) 的概率失败,立即死亡

钦定一个挑战选择,最大化存活天数的期望,输出这个期望值。

数据范围 \(n\le 300,m\le 100\)

key: 倒推概率dp

\(f[i][j]\) 表示第 i 个 boss,当前有 \(j\) 颗宝石,期望下最大存活天数。

若不打 \(f[i][j] \leftarrow \begin{cases} f[i+1][j-(d[i+1]-d[i])]& j \ge d[i+1]-d[i]\\ d[i] + j & otherwise \end{cases}\)
若打 \(f[i][j] \leftarrow (1-p[i])*d[i] + p[i]*f[i+1][\min(m, j-1+w[i])]\)。

孵化者

n 个人,每人两个 bool 属性 \((g,p)\),m 对关系 \((i,j)\in R\)

按顺序操作:

  1. 赋值 \(g_i\leftarrow True\)
  2. \(\forall g_i|p_i ,(i,j)\in R, p_j\leftarrow True\)

可以操作任意次,最大化 \(g_i=True \And p_i=Fause\) 的数量。

数据范围 \(T\le 100,n\le 50,m\le 1000\)

建有向图,两个条件:

  1. 若 i 可以到达 j,则 i,j 只能选一个
  2. 环上的点一定不选

key: DAG 的最大独立集等于最小可相交路径覆盖

证明显然,一条路径只能选一个点。

在原图中算一下连通性,若 i 可以到达 j ,则在二分图中连边。答案是有效点数 \(-\) 最大匹配。

Day 3

训练题

串匹配

给 n 个模式串和 m 个母串,对于每个模式串,输出是否出现过;对于每个母串,输出出现了多少(个 \(\cdot\) 次)模式串。

数据范围:\(\sum |T| \le 5\times 10^5,\sum |S|\le 10^6\)

key:AC 自动机

宝石迷阵

纯模拟,不说了

*加权 n 皇后

给定 n*n 方格,每个格子上有权值。放 n 个皇后,最大化皇后所在格子的权值和。

数据范围:\(n\le 3000\)

一些可能性:Dancing-Links(X-links),模拟退火\(\dots\)

讲课

搜索和非确定性算法

Day 4

训练题

有向图

n 个有向图,开始所有棋子在 1 号点,每次选一个棋子移动,不能移动者输。问是否有先手必胜策略,并给出第一步的某个可行方案。

key: SG 函数

组合数

求 \(\binom{n}{m} \bmod Q\) 的值。

数据范围 \(n,Q\le 2\times 10^9,m\le 2\times 10^5\)

第一眼你可能想使用 exlucas 定理,但是 \(O(Q+\log Q)\) 是不能接受的。

突破口在非常小的 m,考虑写成 \(\frac{n^{\underline m}}{m!}\) 的形式,于是分子分母都只有 2e5 个数。

暴力:质因数分解,对每个质因数求 \(m!\) 中它的次数,在分母中直接约去,最后乘起来即可。复杂度 \(O(m\log m)\)

std:应用 exlucas 的思想,先中国剩余定理拆开再算同余式。

买零食

类似二维偏序查找的一个东西(?

二分、st表等瞎搞一下即可。

Day 5

训练题

*基因测序

给定 n 个长度不超过 64 的 A T G C 模式串,求最短的母串,包含所有模式串。

数据范围 \(n\le 1.5\times 10^5\)

常规的,我们使用 AC 自动机上状压 dp 来解决这个问题。
但是数据范围并不允许

基因对齐

求两个字符串的最长公共子序列。

数据范围 \(|S|\le 10^5\)

直接使用空间 O(n),时间 O(n^2) 的 dp,跑大约 400s

基因发现

给定一个文本串,求最长的出现至少 3 次的子串。

数据范围 \(|S|\le 10^5\)

key:二分 + hash

若存在长度为 k 的合法子串,则一定存在长度为 \(k-1,k-2,\dots,1\) 的,故可以二分答案,转化为判断是否存在长为 k 的子串。

显然,长度为 k 的子串只有 \(O(n)\) 个,利用 hash,直接判断是否存在某个值出现 3 次即可。

预处理前缀 hash 值,就可以 O(1) 查询任意子串的 hash。

复杂度 \(O(n\log n)\)

Day 6

训练题

路径排序(Luogu 5353 树上后缀排序)

key:基数排序

利用 SA 中的基数排序思想,倍增的排序就好了。
Luogu 5353 还需考虑去重

后两题太过诡异,跳过好了。

结业测试

骑士的旅行

一棵 n 个点的树,上面有 m 个 boss \((p_i,w_i)\)。支持单点修改位置和武力值,询问路径上武力值前 K 大的 boss 是谁。

数据范围 \(n,m\le 4\times 10^4,Q\le 8\times 10^4,K\le 20\)

key: 树剖 + 线段树

k 很小,故可以线段树暴力维护,复杂度 \(O((n+Q)k\log n)\)

树的同构

给 m 棵 n 个点的有根树(无根树),判断它们的同构关系。

数据范围 \(n,m\le 50\)

key1:AHU 树的最小表示法(括号序)

每棵树都可以转化成若干个 dfs 括号序列,其中字典序最小的是最小表示法。

定理:最小表示法相同的两棵树同构。

于是直接求最小表示法就好了,复杂度 \(O(n^2m)\)

key2:树 hash

找一种不会被卡的哈希方式,直接比较哈希值就可以了。

复杂度可以做到 \(O(nm\log n)\)

一种较好的哈希方式是 \(f(S)=\left(c+\sum\limits_{x\in S}g(x)\right)\bmod P\)

c 是常数,随便设一个就行。g 是整数到整数的映射,最好不用多项式,可以用类似 xor shift,xor 完再随机异或一个常数。

糖果

n 行 m 列表格,填 1 ~ k 的数。要求:

  1. 每行单调不减
  2. 任意两行不完全相同

问有多少种不同的填写方案,答案模 P 输出(不保证 P 是质数)。

数据范围 \(n,m\le 10^5,k,P\le 2\times 10^9\)

key: 插板法 + 组合数取模

只需知道每个数有几个,就可以排出一行的方案,有 \(M=\binom{m+k-1}{m-1}\) 种。故 n 行的方案是 \(\binom{M}{n}\) 种。

于是我们可以使用 D4T2 的方法计算这两个数。

隐身术

给定两个串A,B。请问B中有多少个非空子串和A的编辑距离不超过K?

  • 子串:B中连续的一段,不同位置算作多个。
  • 编辑距离:把一个串变成另一个串需要的最小操作次数,每次操作可以插入、删除或者替换一个字符。

数据范围 \(|A|+|B|\le 10^5,K\le 5\)

key:SA + 暴搜跳 lcp

枚举起点,每次跳到一个需要修改的位置,结束后记录一下个数。

复杂度只有 \(O(n\log n +n 3^k)\)

标签:10,le,最小,times,key,2015,集训,省队,范围
From: https://www.cnblogs.com/Cindy-Li/p/18288719

相关文章

  • 2024SCAU暑假集训_1题解(部分,待补充)
    最近我们开始了暑假集训现在我来补一下第一场集训的题解题目题号来源是否写了题解A黑暗爆炸4771否但是放了大佬的链接指路B黑暗爆炸3399已写C洛谷P3231D洛谷P2120ECodeForces197AF洛谷P1732GBZOJ5296H黑暗爆炸1406......
  • HNU暑假集训-恺撒Caesar密码
    问题的关键是找到密码替换的规则即:密码的第i个字母=原码在字母表后的第五个字母思路:1.先找到密码第i个字母在字母表中的位置s[i]-'A'      2.找到该位置前的第五个字母的在字母表的下标:(26+s[i]-'A'-5)%26聪明的你一定知道为什么先加26,再模26加......
  • 2024暑假集训测试2
    前言比赛链接。T1、T4比较简单,打完基本就罚坐了,想了三个小时的T2、T3也没想出来。T1酸碱度中和二分答案加贪心即可,先排序,每瓶可装\(a_i\sima_i+2*m\)。点击查看代码#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'#definesortstable_sortus......
  • 2024暑假集训测试1
    前言比赛链接。排名历程:\(3→5→3\),因为\(T1\)的specialjudge是后来加上的,导致部分人挂了分,赛后安排了重测,就变成了\(rank5\),赛后发现\(T1\)数据过水,重新更新了数据,卡掉了很多人的假做法,又成了\(rank3\)。T1已知合法的分组有\(\begin{cases}0~0~0\\1~1......
  • 南京外国语学校暑期集训7/8号排序2
    显然,这道题使用快排第k大做,快排第k大思想:(下标从1开始)每次找一个key值,一轮后可以得到key在原数组中的位置(暂且称之为a),把a和n-k+1值比较,一样就返回,小就往左边找,大就往右边找。然后原数组在main里按题目要求初始化一下就行了点击查看代码#include<bits/stdc++.h>usingnamespac......
  • 题解:洛谷 P2678 [NOIP2015 提高组] 跳石头
    题解:洛谷P2678[NOIP2015提高组]跳石头标签:二分,贪心题意给定一个数列,\(a_0=0,a_{N+1}=L\),从其中删除不超过\(M\)个数,使得\(a_i-a_{i-1}\)的最小值最大。思路从最小值最大不难想到二分答案。统计\(a_i-a_j<mid\)的数量\(k\),如果不满足的话说明不删,\(j\getsi\)。......
  • 2024暑假南京外国语学校c++集训 20240706 测试(J/S-)
    A笔记本电脑第一题没啥好说的了点击查看代码#include<bits/stdc++.h>usingnamespacestd;intn;set<int>t;pair<int,int>arr[100009];intmain(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; for(inti=1;i<=n;i++) { cin>>......
  • 「杂文」开始集训前你所需要知道的
    写在前面面向入门选手的指导。ICPC/CCPC赛事与赛制ICPC/CCPCICPC(英文:InternationalCollegiateProgrammingContest,中文:国际大学生程序设计竞赛)由ICPC基金会(英文:ICPCFoundation)举办,是最具影响力的大学生计算机竞赛。由于以前ACM赞助这个竞赛,也有很多人习惯叫它ACM竞......
  • [POI2015] WYC 题解
    [POI2015]WYC显然矩阵乘法发现点数和边权非常小,所以可以考虑拆点把每个点拆为\(u_1\),\(u_2\),\(u_3\),初始:\(u_1\tou_2\),\(u_2\tou_3\),每一条加边:\(u+(w-1)\timesn\tov\)因为\(k\)非常大,所以考虑倍增优化注意:答案会爆longlong,需要使用unsignedlonglong//Pro......
  • 暑假集训第五天
    并查集/最小生成树/Kruskal重构树专题TwoFamousCompanieshttps://www.luogu.com.cn/problem/solution/SP11579如果白边整体权值太小,我们就把所有白边的权值加上一个正值,让整体权值变大。反之,白边整体权值过大,我们就把所有白边的权值加上一个负值。让整体权值变小。我们把......