2019暑期集训 - Day 7
题目只能用变态形容
概述
提高 B 组
4题:T0 , T1 , T2 , T3
100/400 分
124/179 名
T0 直角三角形
TLE 10/100 分
Description
二维平面坐标系中有 \(N\) 个点。
从 \(N\) 个点选择 \(3\) 个点,问有多少选法使得这 \(3\) 个点形成直角三角形。
Input
第一行包含一个整数 \(N\ (3\leq N\leq 1500)\) ,表示点数。
接下来 \(N\) 行,每行包含两个用空格隔开的整数表示每个点的坐标,坐标值在 \(-10^9\) 到 \(10^9\) 之间。
每个点位置互不相同。
Output
输出直角三角形的数量。
Sample Input
输入1:
3
4 2
2 1
1 3
输入2:
4
5 0
2 6
8 6
5 7
输入3:
5
-1 1
-1 0
0 0
1 0
1 1
Sample Output
输出1:
1
输出2:
0
输出3:
7
Solution
O2 太强了,去你的斜率优化
记录每两个点的距离, \(O(N^3)\) 遍历每种组合,勾股定理检验是否为直角三角形,再手动来个 O2 优化, AC
至于斜率优化的正解,移步大佬的博客
Update :
写出来正解了,确实是斜率优化。
sort 后搜索相同斜率,可以将时间复杂度降为 \(O(N^2\log N)\) 就能 AC 了
T1 排序
RE 90/100 分
Description
你收到一项对数组进行排序的任务,数组中是 \(1\) 到 \(N\) 个一个排列。你突然想出以下一种特别的排序方法,分为以下 \(N\) 个阶段:
• 阶段1 ,把数字 \(1\) 通过每次交换相邻两个数移到位置 \(1\) ;
• 阶段2 ,用同样的方法把 \(N\) 移到位置 \(N\) ;
• 阶段3 ,把数字 \(2\) 移到位置 \(2\) 处;
• 阶段4 ,把数字 \(N-1\) 移到位置 \(N-1\) 处;
• 依此类推。
换句话说,如果当前阶段为奇数,则把最小的未操作的数移到正确位置上,如果阶段为偶数,则把最大的未操作的数移到正确位置上。
写一个程序,给出初始的排列情况,计算每一阶段交换的次数。
Input
第一行包含一个整数 \(N\ (1\leq N\leq 100000)\) ,表示数组中元素的个数。
接下来 \(N\) 行每行一个整数描述初始的排列情况。
Output
输出每一阶段的交换次数。
Sample Input
输入1:
3
2
1
3
输入2:
5
5
4
3
2
1
输出3:
7
5
4
3
7
1
2
6
Sample Output
输出1:
1
0
0
输出2:
4
3
2
1
0
输出3:
4
2
3
0
2
1
0
Hint
70% 的数据 \(N\leq 100\)
Solution
血的教训,数组千万别开小了
线段树
构造一个线段树,存储区间内被移动过的数的个数
用 a[k] 表示 \(k\) 的位置 , moved[i][j] 代表区间 [i,j] 中已被移动的数的个数(当然,这东西用线段树来维护)
查询数字 \(k\) 需要移动的次数时,如果要把 \(k\) 往前移,就要移动 a[k]-1-moved[1][a[k]] 次
因为,当 \(k\) 之前的数没有一个被移动过的时候,\(k\) 就需要从原位移动到最前面,也就是移动 a[k]-1 次,而每当区间 [i,j] 中有一个数已被移动,那么这个位置就相当于空了出来, \(k\) 就可以少移动一步。所以得出了上面的结论
同理,当 \(k\) 要后移时,要移动 n-a[k]-moved[a[k]][n] 次
这样这道题目就被简单地解决了
T2 自行车赛
WA 0/100 分
Description
翠亨村举行一场自行车赛,翠亨村有 \(N\) 个路口(编号 \(1\) 到 \(N\) ),另有 \(M\) 条双向边连接起来。下面有几个定义:
•路径:由一系列边组成,满足后一条边的起点为前一条边的终点;
•简单路径:每个路口最多经过一次的路径;
•环:起点和终点在同一个路口的简单路径。
保证每对路口之间至少有一条路径相连,除此之外还满足每条边最多只会出现在一个环中。
你的任务是找出最长的满足以下两个条件的路径:
•起点可以在任意路口,但终点必须在 \(1\) 号路口;
•路径可能多次经过同一个路口,但每条边最多只会经过一次。
Input
第一行包含两个整数 \(N\) 和 \(M\ (2\leq N\leq 10000\ ,\ 1\leq M\leq 2N-2)\) ,表示路口数量和边的数量。
接下来 \(M\) 行,每行包含两个不同的整数 \(A\) 和 \(B(1\leq A\ ,\ B\leq N)\) ,表示 \(A\) 和 \(B\) 之间存在一条边直接相连,两个路口之间最多只有一条边直接相连。
Output
输出最长的比赛路径的长度。
Sample Input
输入1:
4 3
1 2
1 3
2 4
输入2:
6 6
1 2
1 3
2 4
3 4
3 5
5 6
输入3:
5 6
1 2
2 3
3 4
4 5
5 3
3 1
Sample Output
输出1:
2
输出2:
5
输出3:
6
Solution
从 \(1\) 开始暴搜,能拿 40 分
正解完全看不懂,求大佬指教
Update :
终于, finally ,我会做这道题了!!!
思路其实不难,具体实现看这里
T3 小L的数列
CE 0/100 分
Description
众所周知,小L逃学钓鱼。
现在他有一个递推数列 \(f\) (下标从 \(1\) 开始)。
当 \(i>k\) 时
\(\large{f_i=(f_{i-1}^{b_1}\cdot f_{i-2}^{b_2}\cdot \ \dots\ \cdot f_{i-k}^{b_k})\mod p}\)
现在给你 \(b_1,b_2,\cdots ,b_k\ ,\ n\) ,你需要告诉小L \(f_n\) ,其中 \(p=998244353\) 。
Input
一行两个整数 \(n\) 和 \(k\) 。
之后 \(1\) 行 \(k\) 个正整数 \(b_1,b_2,\cdots ,b_k\) 。
之后 \(1\) 行 \(k\) 个正整数 \(f_1,f_2,\cdots ,f_k\) 。
Output
输出一个整数表示 \(f_n\)
Sample Input
输入1:
5 4
1 2 3 4
4 3 2 1
输入2:
100000 4
1 2 3 4
12 23 34 45
Sample Output
输出1:
27648
输出2:
33508797
Hint
【样例解释】
\(1^1\times 2^2\times 3^3\times 4^4=27648\)
【数据范围】
对于30% 的数据, \(n≤10000\)
对于另外20% 的数据, \(b_i=1,n≤1000000\)
对于另外20% 的数据, \(f_1,f_2,\ \cdots\ ,\ f_{k-1}=1\)
对于另外20% 的数据, \(k≤30\)
对于100% 的数据, \(1≤k≤200\ ;\ 1≤n≤40000000\ ;\ 1≤bi,fi≤998244352\)
Solution
呵呵,我讨厌矩阵快速幂
\(f_n\) 肯定能表示成 \(f_i=(f_1^{s_1}\cdot f_2^{s_2}\cdot \ \dots\ \cdot f_k^{s_k})\mod p\) 的形式,因为每个 \(f_i\) 都是由之前的 \(k\) 个数的几次幂相乘得到的。
那么,我们可以用矩阵记录 \(f_{i-1},f_{i-2},\cdots f_{i-k}\) 分解为 \(f_j=(f_1^{s_1}\cdot f_2^{s_2}\cdot \ \dots\ \cdot f_k^{s_k})\mod p\) 形式时 \(s_1,s_2,\cdots ,s_k\) 的值
对于样例1,我们初始记录为
\(\begin{bmatrix}\ 0&1&0&0\ \\ \ 0&0&1&0\ \\ \ 0&0&0&1\ \\ \ 4&3&2&1\ \end{bmatrix}\)
其中最后一行就代表 \(f_{k+1}\) 分解为 \(f_j=(f_1^{s_1}\cdot f_2^{s_2}\cdot \ \dots\ \cdot f_k^{s_k})\mod p\) 形式时 \(s_1,s_2,\cdots ,s_k\) 的值
这样,当我们把这个矩阵平方时,得到
\(\begin{bmatrix}\ 0&0&1&0\ \\ \ 0&0&0&1\ \\ \ 4&3&2&1\ \\ \ 4&7&5&3\ \end{bmatrix}\)
此时最后一行就是 \(f_{k+2}\) 分解后的指数了
根据矩阵乘法的定义和题目递推的方式很容易证明这一点
以此类推,用矩阵快速幂求出
\(\begin{bmatrix}\ 0&1&0&0\ \\ \ 0&0&1&0\ \\ \ 0&0&0&1\ \\ \ 4&3&2&1\ \end{bmatrix}^{\large{n-k}}\)
这样最后一行就是 \(f_n\) 分解后的指数,我们再用快速幂就能算出答案了
一些好用的网站
\(\color{Green}{\texttt{图床}}\)
\(\color{Green}{\texttt{找规律}}\)
\(\color{Green}{\texttt{C++}}\)
\(\color{Green}{\texttt{LaTeX 公式}}\)
\(\color{Green}{\texttt{OI WIKI}}\)
\(\color{Green}{\texttt{在线编译器}}\)
\(\color{Green}{\texttt{WolframAlpha}}\)
\(\color{Green}{\texttt{OIer 数据库}}\)

浙公网安备 33010602011771号