2018.12.08【NOIP提高组】模拟B组 比赛总结

题目

diyiti

Description

给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个正方形。注意木棍不能弯折。问方案数。
正方形:四条边都相等、四个角都是直角的四边形。

Input

第一行一个整数n。
第二行包含n 个整数ai,代表每根木棍的长度。

Output

一行一个整数,代表方案数。

Sample Input

8
4 5 1 5 1 9 4 5

Sample Output

3

Data Constraint

对于20% 的数据,满足:n ≤ 30
对于40% 的数据,满足:n ≤ 200
对于60% 的数据,满足:n ≤ 1000
对于100% 的数据,满足:n ≤ 5000; 1 ≤ ai ≤ 10^7


保留道路

Description

很久很久以前有一个国家,这个国家有N个城市,城市由1,2,3,…,N标号,城市间有M条双向道路,每条道路都有两个属性g和s,两个城市间可能有多条道路,并且可能存在将某一城市与其自身连接起来的道路。后来由于战争的原因,国王不得不下令减小花费从而关闭一些道路,但是必须要保证任意两个城市相互可达。
道路花费的计算公式为wGmax{所有剩下道路的属性g}+wSmax{所有剩下道路的属性s},其中wG和wS是给定的值。国王想要在满足连通性的前提下使这个花费最小,现在需要你计算出这个花费。

Input

第一行包含两个正整数N和M。
第二行包含两个正整数wG和wS。
后面的M行每行描述一条道路,包含四个正整数u,v,g,s,分别表示道路连接的两个城市以及道路的两个属性。

Output

输出一个整数,表示最小花费。若无论如何不能满足连通性,输出-1。

Sample Input

3 3
2 1
1 2 10 15
1 2 4 20
1 3 5 1

Sample Output

30

扫描二维码关注公众号,回复: 11879192 查看本文章

Data Constraint

对于10%的数据,N≤10,M≤20;
对于30%的数据,N≤100,M≤1000;
对于50%的数据,N≤200,M≤5000;
对于100%的数据,N≤400,M≤50000,wG,wS,g,s≤1000000000。


进化序列

Description

Abathur采集了一系列Primal Zerg 的基因样本,这些基因构成了一个完整的进化链。为了方便,我们用 A 0 , A 1 . . . A n − 1 A_0,A_1...A_{n-1} A0,A1...An1 这n 个正整数描述它们。
一个基因Ax 可以进化为序列中在它之后的基因 A y A_y Ay。这个进化的复杂度,等于 A x ∣ A x + 1 . . . ∣ A y A_x | A_{x+1}...| A_y AxAx+1...Ay的值,其中| 是二进制或运算。
Abathur 认为复杂度小于M 的进化的被认为是温和的。它希望计算出温和的进化的对数。

Input

第一行包含两个整数n,m。
接下来一行包含 A 0 , A 1 . . . A n − 1 A_0,A_1...A_{n-1} A0,A1...An1 这n 个正整数,描述这n 个基因。

Output

第一行包含一个整数,表示温和的进化的对数。

Sample Input

4 6
1 3 5 1

Sample Output

2

Data Constraint

对于30% 的数据,1 <= n <=1000。
对于100% 的数据,1 <= n<= 100000,0 <= m <= 2 30 2^{30} 230,1<= Ai<= 2 30 2^{30} 230


B

Description

给定一个3*3的网格图,一开始每个格子上都站着一个机器人。每一步机器人可以走到相邻格子或留在原地,同一个格子上可以有多个机器人。问走n步后,有多少种走法,满足每个格子上都有机器人。答案对 1 0 9 + 7 10^9+7 109+7取模。

Input

第一行包含一个整数n。

Output

输出一行输出走法的数量 Mod 1 0 9 + 7 10^9+7 109+7

Sample Input

1

Sample Output

229

Data Constraint

对于40%的数据,1<=n<=10;
对于70%的数据,1<=n<=10^6;
对于100%的数据,1<=n<=10^18。


总结

这次完美炸车了。。。炸车了!!!
先读完了题目。
看完T1后,我十分懵逼地算样例;算完之后,发现这并没有什么用,遂弃之。
第二题看起来很easy,一看到是图,我就万分高兴;再看见“最小花费”,我就更高兴了,且自信了起来——二分答案啊!
于是我的思维就被二分带跑了,我于是打啊打啊,打了不同版本的代码:

0.0.0.1:先二分答案中的g,再二分s。打代码之前发现不行,遂升级;
0.0.0.2:先二分总花费,再二分答案中的g,运行代码时发现,遂跳跃式升级;
1.0.0.3:先二分总花费,再直接判定。可以先把每一条边的g和s分别乘上wG,wS,再把它们加起来。能用的边就是g+s<=mid的边。

打完后,发现跑不过样例啊!才发现这个方法有bug,提交后放弃了T2。
T3是我认为最水的题目了。
我们只用求出一共有几个满足复杂度小于m的序列就可以了。
找序列,不难想到枚举起点,再用log的算法找终点。但这道题目不能用前缀和,我就想到了RMQ
f i , j f_{i,j} fi,j表示以 i 为起点,长度为 2 j 2^j 2j的序列的复杂度。
接着就像倍增那样做就可以了。
我于是很快很快地打完交代码,交完之后才发现这个代码漏洞百出。
改了整场比赛,还是没改出来(我以为改出来了!!!),于是爆0了。
T4让我不知所措,想打表找规律,却发现连暴力都不会打!!!

题解

T1

可以考虑怎么把6条木棒分成4份。
显然只有3 1 1 1(一组由3根拼接得到,其余都是相等的木棒)和2 2 1 1这两种方法。
为了方便操作,开一个桶b, b i b_i bi表示有多少根长度为 i 的木棒。
先枚举相等的三边对应的长度,设为x( b x ≥ 3 b_x\geq 3 bx3)那么此时的方案数显然是 C b x 3 C_{b_x}^{3} Cbx3
剩下那三根木棒的和为x。可以开一个桶a, a i a_i ai表示由两根木棒拼接而成的总长度为 i 的方案数,可以 n 2 n^2 n2预处理出来。可以先枚举那三条木棒中的一条,设它的长度为y( y < x − 1 y<x-1 y<x1),那么剩余两条的总长度就为 x − y x-y xy,方案数为 a x − y a_{x-y} axy。但是这样会重复,可能会出现长度为y的木棒出现了2次的情况。这种情况的方案是 a x − 2 y a_{x-2y} ax2y
综上所述,方案数应为 C b x 3 ( a x − y − a x − 2 y ) C_{b_x}^{3}(a_{x-y}-a_{x-2y}) Cbx3(axyax2y)
另外, y = x 3 y=\frac{x}{3} y=3x的情况要特判一下,而总的方案数也要除以3(因为其它三边都会被重复计算)

猜你喜欢

转载自blog.csdn.net/huangzihaoal/article/details/84894219
今日推荐