学军中学6月培训第一次模拟赛
这篇博客是什么呢?
是学军中学培训比赛记录哒!
Problem A
给出N个不同的点的坐标
求一个N-1次的多项式函数 经过这些点
输出其表达式
为了使题目更简便 所有运算在 Mod 1,000,000,007下进行
输入格式:
一个整数 N
以后N行 每行两个整数 Xi,Yi 表示这个函数经过 (Xi,Yi)
输出格式:
共一行 N个大于等于0小于1,000,000,007的整数
第i个整数表示 x^(i-1)次项的系数
样例输入:
2
0 1
2 4
样例输出:
1 5000000005
数据范围:
对于20%的数据 N<=10
对于40%的数据 N<=500
对于100%的数据 N<=5000 0<=Xi,Yi<=10^9
数据保证 不会有相同的Xi对应着不同的Yi
时间限制:
时限 1s
空间限制:
512MB
自闭过程
并没有意识到一个高次多项式除以一个二次多项式的复杂度是\(O(n)\)的,然后还没有想到那个DP做法。
先写了一个搞死小圆,又试着写了一个\(O(n^2 \log n)\)的前后缀\(MTT\),结果跑了\(20s\),\(40pts\)滚粗了。
题解
算法一
考虑拉格朗日插值公式:
可以转化成这样:
令\(g(x)=\prod_{j=1}^{n}(x-x_j)\),有:
枚举\(i\),后面那个\(\frac{g(x)}{x-x_i}\)可以\(O(n)\)算,时间复杂度为\(O(n^2)\)。
算法二
考虑算法一中的这个式子:
可以理解为你要算\(\prod_{j=1}^{n}(x-x_j)\),不过你需要对于其中一个\(j\),把乘\((x-x_j)\)换成乘\(A_j\),然后对于每种方案最终得到的多项式求和。
很容易想到用两个数组DP就好了,令\(f[i][j]\)表示还没有换过,\(g[i][j]\)表示已经换过了,状态转移方程显然,时间复杂度为\(O(n^2)\)。
Problem B
千百年来 古老的黄河哺育了一代又一代智慧勤劳的中华儿女 是中华民族的母亲河
黄河发源于巴颜喀拉山 贯穿整个华北平原 奔腾不息 激流飞溅 最终汇入勃海
全长万里 流经九省 有长安雒阳大梁宜阳等古都名簇拥于其两侧
但是 在古代 要解决预防黄河不定期的洪汛是一件很困难的事情
智慧勤劳的先贤们 想到建立了类似后来的烽火台办法来解决这个问题
他们在巴颜喀拉山和沿途的高地建立烽火台 把上流的河流洪汛信息转成二进制
日举燧 夜举烽 (如果不行的话也会用人力)昼夜不息的传向下流城市
己知洪汛信息从巴颜喀拉山上开始发送 途经一些高地上的烽火台 传到下流的城市
一般来说(数据不保证)
高地高度越高 能向下流传达信息的距离就越远 但同时建造费用也越高(因为要把土木石块等建材运上山顶)
当然巴颜喀拉山的高地上有已经建好的烽火台(即建造费用为零)
现在告诉你所有高地的信息:
Pi: 建立烽火台的代价
Ri: 能向下流传达信息的最大距离
Di: 这个高地到巴颜喀拉山的距离
要求你选取其中一些高地建立烽火台 (设其序列为 S1…SK)
把信息传到下流某一个高地
如果 第i个烽火台的 D_(s_i )+R_(S_i )
那么 我们需要用人力跑到 D_(s_i )+R_(S_i ) 处来接收上一个烽火台的信息
人力传输要花费 (D_(S_(i+1) )-D_(S_i )-R_(S_i ))^K/(D_(S_i )+R_(S_i ) ) 的代价
(K即人力传输的先进程度 用一个大于等于2小于等于5的正整数表示)
否则就不需要传输代价
现在问你如果想要在第I个高地建立烽火台 接收到来自巴颜喀拉山的信息
最少需要的代价是多少
输入格式:
两个整数 N,K 表示 高地数 和 人力传输的方式
以后N行 第i行三个整数 Pi,Ri,Di
表示在距离巴颜喀拉山第i近的高地建立烽火台的代价
以及 能向下流传达信息的最大距离
以及 这个高地到巴颜喀拉山的距离
巴颜喀拉山即是第一近的高地
输出格式:
共N行
第i行表示 在距离巴颜喀拉山第i近的高地建立烽火台接收到巴颜喀拉山传来的信息的
最小代价 保留一位小数
样例输入:
6 5
0 20 0
10 30 10
5 10 20
10 10 30
10 8 40
1 0 50
样例输出:
0.0
10.0
5.0
15.0
20.0
21.7
以下是某行所对应的方案
选1
选1,2
选1,3
选1,3,4
选1,2,5
选1,2,5,6
数据范围:
对于20%的数据 N<=15
对于40%的数据 N<=5000
对于100%的数据 N<=100000, 2<=K<=5, 0<=Di,Ri,Pi<=1000000000 D1=P1=0
对于 40%的数据 K=2
对于 30%的数据 K=3
对于 10%的数据 K=4
对于 20%的数据 K=5
数据保证所有答案<=1e15
时限 3s
注意:
数据里p[1]可能不为 0,请选手们读入之后把 p[1]改成 0
自闭过程
完全没有往决策单调性这方面想,反而是想了半天数据结构优化DP。
写了个没用的离散化懒得删了,没想到离散化的数组开小导致越界,原本\(40pts\)的暴力炸得只剩\(20pts\)了,滚粗了。
题解
令\(f[i]\)表示考虑了前\(i\)个烽火台,强制选了第\(i\)个的最小代价。
考虑从\(f[j]\)向\(f[i]\)的转移,如果\(D_j+R_j \geq D_i\),显然可以直接转移,用一个优先队列维护就好了,如果\(D_j+R_j < D_i\),可以注意到这类转移具有决策单调性(证明?),直接使用单调队列维护决策三元组就好了,具体可以看这篇博客,时间复杂度为\(O(n \log n)\)。
Problem C
给出一张由N个点构成的有向图
每个点有一个由小写字符表示的优先程度 , 记为Pi
对于 一条回路
我们把他所有点的Pi 按照回路的顺序依次连起来 构成一个字符串
称为这条回路的一个表示
当然 一条长度为N (N>=3) 的回路有N种 表示
我们称其中最小的一个为其最小表示
现给出一张有向图 求其一条经过所有点各一次的回路 使其最小表示最小
输入格式:
第一行 一个整数 N表示 点数
第二行 N个字符 表示这N个点的 Pi
接下来 每行两个数 Ai,Bi 表示Ai -->Bi 有一有向条
读到文件结束为止
输出格式:
仅一行 依照最小表示的顺序输出 每个点的标号
样例输入:
15
mmielxpdahryfdp
1 2
1 3
1 4
1 6
1 8
1 9
1 10
1 12
1 13
1 14
2 3
2 4
2 5
2 8
2 10
2 11
2 14
2 15
3 4
3 5
3 6
3 7
3 8
3 14
4 3
4 5
4 7
4 9
4 11
4 12
4 14
5 1
5 6
5 8
5 9
6 3
6 4
6 7
6 8
6 11
6 12
6 13
6 15
7 1
7 3
7 8
7 12
7 14
8 3
8 4
8 5
8 7
8 9
8 10
8 12
9 2
9 6
9 8
9 10
9 11
9 12
9 14
9 15
10 1
10 2
10 5
10 8
10 11
10 13
10 14
10 15
11 2
11 3
11 4
11 5
11 7
11 10
11 12
11 15
12 1
12 3
12 5
12 6
12 8
12 9
12 10
12 13
12 15
13 4
13 5
13 6
13 8
13 9
13 10
13 14
14 3
14 4
14 6
14 7
14 9
14 11
14 12
14 13
14 15
15 1
15 2
15 3
15 4
15 5
15 6
15 9
15 10
15 13
样例输出:
9 8 4 14 13 10 5 1 3 7 12 6 11 2 15
// 1 2 3 4 5 6 7 15 15 15 <-这是啥?
数据规模:
1<=n<=1000000
边数规模未说明,按读入能够承受为限。
文件下载:
自闭过程
知道这是提答题的第一反应:woc,提答题,出题人nmsl。
打完前两道题的暴力之后开始搞,还有差不多两个小时的时间。
前两个点,嗯,状压DP。
第三、四个点,\(n=m\)?嗯,是个基环树,没思路,走了。(连通图还一定存在哈密顿回路,闭着眼睛都知道这玩意是个环,神TM基环树,我TM真是个人才)
第五、六、七个点,\(m=\frac{n(n-1)}{2}\),是个竞赛图,所有字符还一模一样,都知道强连通竞赛图一定存在哈密顿回路,但是我不会求啊,欲哭无泪。
第八、九、十个点,什么玩意?
最后只写了前两个点的状压DP,写的时候还犯了不少NC错误。
题解
一个环的话倍长之后求\(SA\)就好了。
最后三个点zzy切了,不过我还是一脸懵逼。
总分:40+20+20=80pts
Rank:9
惨
posted on 2019-06-05 20:59 ErkkiErkko 阅读(72) 评论(0) 编辑 收藏 举报