2019暑期集训 - Day 23

集训队互测?什么毒瘤题目!





概述

提高 B 组
4题:T0 , T1 , T2 , T3
200/400 分
12/115 名


T0 淘汰赛制

WA 60/100 分

Description

淘汰赛制是一种极其残酷的比赛制度。 \(2^n\) 名选手分别标号 \(1,2,3,\cdots,2^n-1,2^n\),他们将要参加 \(n\) 轮的激烈角逐。每一轮中,将所有参加该轮的选手按标号从小到大排序后,第 \(1\) 位与第 \(2\) 位比赛,第 \(3\) 位与第 \(4\) 位比赛,第 \(5\) 位与第 \(6\) 位比赛……只有每场比赛的胜者才有机会参加下一轮的比赛(不会有平局)。这样,每轮将淘汰一半的选手。 \(n\) 轮过后,只剩下一名选手,该选手即为最终的冠军。
现在已知每位选手分别与其他选手比赛获胜的概率,请你预测一下谁夺冠的概率最大。

Input

输入文件第一行是一个整数 \(n\ (1\le n\le 10)\),表示总轮数。接下来 \(2^n\) 行,每行 \(2^n\) 个整数,第 \(i\) 行第 \(j\) 个是\(p_{i,j}\ (0\le p_{i,j}\le 100\ ,\ p_{i,i}=0\ ,\ p_{i,j}+p_{j,i}=100)\) ,表示第 \(i\) 号选手与第 \(j\) 号选手比赛获胜的概率。

Output

输出文件只有一个整数 \(c\) ,表示夺冠概率最大的选手编号(若有多位选手,输出编号最小者)。

Sample Input

2
0 90 50 50
10 0 10 10
50 90 0 50
50 90 50 0

Sample Output

1

Solution

又是 DP

可以发现,不管如何改变比赛的顺序,每个人的获胜率都是相同的,所以我们默认以正常的相邻两人比赛的方式尝试,如下图。

现在考虑如何计算答案,设 \(a[i][j]\)\(i\)\(j\) 的胜率, \(f[i][j]\) 为第 \(i\)\(j\) 胜出的概率。那么有:
\(f[i][j]= \sum\limits_{k} f[i-1][j] \times f[i-1][k] \times a[j][k]\)
当然, \(k\) 必须保证可能在第 \(i\) 轮与 \(j\) 比赛,即 \(k\) 从未与 \(i\) 合并。
可以通过计算枚举出来每个可能的 \(k\)

T1 方程的解

AC 100/100 分

Description

佳佳碰到了一个难题,请你来帮忙解决。
对于不定方程 \(a_1+a_2+\dots+a_{k-1}+a_k=g(x)\) ,其中 \(k\ge 2\) 且 $k∈N^ * $, \(x\) 是正整数, \(g(x)=x^x\ mod\ 1000\) (即 \(x^x\) 除以 \(1000\) 的余数), \(x,k\) 是给定的数。我们要求的是这个不定方程的正整数解组数。
举例来说,当 \(k=3,x=2\) 时,分别为\((a_1,a_2,a_3)=(2,1,1)\ ,\ (1,2,1)\ ,\ (1,1,2)\).

Input

输入文件有且只有一行,为用空格隔开的两个正整数,依次为 \(k,x\)

Output

输出文件有且只有一行,为方程的正整数解组数。

Sample Input

3 2

Sample Output

3

Hint

对于40% 的数据, \(ans\le10^{16}\)
对于100% 的数据, \(k\le 100\ ,\ x\le 2^{31}-1\ ,\ k\le g(x)\)

Solution

挺简单的

先来个快速幂,算出 \(g(x)\)
然后就是隔板问题的模板了。
加一个高精乘,计算
$\huge\mathrm{ _ C}\small _ {g(x)-1}^{k-1} $

当然,可以再写一个高精除法来应付 \(\mathrm{C}\) 中的除法,不过有个更好的方法,就是在乘之前就约去每个除数,省了算高精除。

T2 物流运输

WA 20/100 分

Description

物流公司要把一批货物从码头 \(A\) 运到码头 \(B\) 。由于货物量比较大,需要 \(n\) 天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在,有的时候某个码头会无法装卸货物。这时候就必须修改运输路线,让货物能够按时到达目的地。但是修改路线是一件十分麻烦的事情,会带来额外的成本。因此物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小。

Input

第一行是四个整数 \(n\ ( 1 \le n \le 100 )\)\(m\ ( 1 \le m \le 20 )\)\(K\)\(e\)\(n\) 表示货物运输所需天数, \(m\) 表示码头总数, \(K\) 表示每次修改运输路线所需成本。
接下来 \(e\) 行每行是一条航线描述,包括了三个整数,依次表示航线连接的两个码头编号以及航线长度 \((>0)\) 。其中码头 \(A\) 编号为 \(1\) ,码头 \(B\) 编号为 \(m\) 。单位长度的运输费用为 \(1\) 。航线是双向的。再接下来一行是一个整数 \(d\) ,后面的 \(d\) 行每行是三个整数 \(P\ (1 < P < m)\)\(a\)\(b\ (1 \le a \le b \le n)\) 。表示编号为 \(P\) 的码头从第 \(a\) 天到第 \(b\) 天无法装卸货物(含头尾)。同一个码头有可能在多个时间段内不可用。但任何时间都存在至少一条从码头 \(A\) 到码头 \(B\) 的运输路线。

Output

包括了一个整数表示最小的总成本。总成本 \(=n\) 天运输路线长度之和 $+\ K\times $改变运输路线的次数。

Sample Input

5 5 10 8
1 2 1
1 3 3
1 4 2
2 3 2
2 4 4
3 4 1
3 5 2
4 5 2
4
2 2 3
3 1 1
3 3 3
4 4 5

Sample Output

32

Hint

\(1 \le n \le 100\ ,\ 1 \le m \le 20\)

Solution

DP

首先我们可以设 \(f[i]\) 表示前 \(i\) 天所花费的最小值
\(f[i]=min(f[i],f[j-1]+(i-j+1)\times L+K) (1\le j\le i)\)
什么意思呢 就是第 \(j\) 天到第 \(i\) 天走同一条路,并且这条路和第 \(j-1\) 天是不同的。
然后交给 SPFA 处理最短路 . . .
But wait a minute ,因为我们要保证第 \(j\) 天到第 \(i\) 天走的最短路是不能包括在这些天内不能经过的点的,所以我们枚举 \(j\) 的时候可以从大到小枚举,并且将第 \(j\) 天无法通过的点同 \(j+1\sim i\) 天无法通过的点塞入一个集合,并且在求最短路时判断不经过集合中的点,就可以求出从第 \(j\) 天到第 \(i\) 天经过未损坏的点从1到m的最短路了。

T3 矩阵乘法(mat)

TLE 20/100 分

Description

给你一个 \(N\times N\) 的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第 \(K\) 小数。

Input

第一行两个数 \(N,Q\) ,表示矩阵大小和询问组数;
接下来 \(N\)\(N\) 列一共 \(N\times N\) 个数,表示这个矩阵;
再接下来 \(Q\) 行每行 \(5\) 个数描述一个询问: \(x_1,y_1,x_2,y_2,K\) 表示找到以 \((x_1,y_1)\) 为左上角、以 \((x_2,y_2)\) 为右下角的子矩形中的第 \(K\) 小数。

Output

对于每组询问输出第 \(K\) 小的数。

Sample Input

2 2
2 1
3 4
1 2 1 2 1
1 1 2 2 3

Sample Output

1
3

Hint

20% 的数据: \(N\le100\ ,\ Q\le1000\)
40% 的数据: \(N\le300\ ,\ Q\le10000\)
60% 的数据: \(N\le400\ ,\ Q\le30000\)
100% 的数据: \(N\le500\ ,\ Q\le60000\)
矩阵中数字是 \(10 ^ 9\) 以内的非负整数;

Solution

整体二分?二维树状数组?

我会码,但不会描述,先看这里,再看这里就好了





树状数组

往这里戳

posted @ 2019-12-27 17:20  imzzy  阅读(36)  评论(0)    收藏  举报