暑假测试 Day 2

来源:互联网 发布:九之濑遥cos淘宝全套 编辑:程序博客网 时间:2024/06/10 10:13


问题 A: 单词接龙1

时间限制: 5 Sec  内存限制: 256 MB  Special Judge
提交: 309  解决: 54
[提交][状态][讨论版]

题目描述

Bsny从字典挑出N个单词,并设计了接龙游戏,只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来。

Bsny想要知道在所给的所有单词中能否按照上述方式接龙组成一个单词环(可能是多个),若能,求所有环的环中单词平均长度最大值。

输入

第一行一个整数N,表示单词数量。

接下来N行,每行一个字符串,仅包含小写字母。

输出

若能组成单词环,输出环中单词的最大平均长度,结果保留2位小数;否则输出"No solution."(不包括双引号)。精度误差在0.01都算正确。

样例输入

3intercommunicationalalkylbenzenesulfonatetetraiodophenolphthalein

样例输出

21.67

提示

20%的数据:n≤20;


70%的数据:n≤1000;


100%的数据:n≤100000,每个单词长度不超过1000。输入数据比较大,C/C++的同学用scanf输入。



~~:

考场上想出正解了,但是没A……

这些测试他们好多人都做过的啊!!

这题70分……后来测试是eps开小了,还有广搜队列长度开小了。

气不气气不气


考虑建图,

一个字符串有用的信息只有3个:长度,头2个字符,尾2个字符;

然后2个字符我们是可以转化的,映射到26*26的整数里去。

单词可以看成头两个字符连向尾2个字符,然后边权是字符串长度。


二分一个平均值。

注意精度误差的存在……二分的eps开0.01!太小就死循环了。。。。

然后统计的时候边权都减去这个平均值。

再用SPFA判断有没有正环就好了。

如果有,就是一个合法解,扩大。

很容易证明其二分性质。



问题 B: 帮助Bsny

时间限制: 1 Sec  内存限制: 256 MB
提交: 180  解决: 23
[提交][状态][讨论版]

题目描述

Bsny的书架乱成一团了,帮他一下吧!

他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数。例如,如果书的高度是30,30,31,31,32,那么混乱值为3;30,32,32,31的混乱值也为3。但是31,32,31,32,31的混乱值为5,这实在是太乱了。

Bsny想尽可能减少混乱值,但他有点累了,所以他决定最多取出k本书,再随意将它们放回到书架上。你能帮助他吗?

输入

第一行两个整数n,k,分别表示书的数目和可以取出的书本数目。

接下来一行n个整数表示每本书的高度。

输出

仅一行一个整数,表示能够得到的最小混乱值。

样例输入

5 125 26 25 26 25

样例输出

3

提示

20%的数据:1≤n≤20,k=1。


40%的数据:书的高度不是25就是32,高度种类最多2种。


100%的数据:1≤k≤n≤100,注意所有书本高度在[25,32]。



~~:

第1题花了太多时间了……

然后扫雷又占据了一点(唔……)

首先想着20分的暴力。。。太低级了。。

看着感觉像区间的DP。。

纸上推了一个,,,感觉没啥毛病,,因为看到书本高度这么小,肯定是切入点;

又想了想,发现果然有问题了。。

弄着弄着就成了四维的状态;

然后把高度(8种)弄成了状压,纸上胡了一个DP……

看上去没什么问题,直接交。。一开始还不如20分的暴力……


改了改小错,又交了一发,,拿了40,发现还有半小时,就放弃掉了。。

后来听正解, 发现开始的思路完全没问题……DP的时候弄错了。

感觉差不多,,结果是天壤之别!



问题 C: 分组

时间限制: 1 Sec  内存限制: 256 MB
提交: 82  解决: 14
[提交][状态][讨论版]

题目描述

Bsny所在的精灵社区有n个居民,每个居民有一定的地位和年龄,ri表示第i个人的地位,ai表示第i个人的年龄。

最近社区里要举行活动,要求几个人分成一个小组,小组中必须要有一个队长,要成为队长有这样的条件:

1、队长在小组中的地位应该是最高的(可以并列第一);

2、小组中其他成员的年龄和队长的年龄差距不能超过K。

有些人想和自己亲密的人组在同一个小组,同时希望所在的小组人越多越好。比如x和y想在同一个小组,同时希望它们所在的小组人越多越好,当然,它们也必须选一个符合上述要求的队长,那么问你,要同时包含x和y的小组,最多可以组多少人?

输入

第一行两个整数n和K;

接下来一行输入n个整数:r1, r2, …, rn

接下来一行输入n个整数:a1, a2, …, an

接下来输入Q表示有Q个询问;

接下来Q行每行输入x, y,表示询问:当x和y组在同一个小组,它们小组最多可以有多少人(x和y也有可能被选为队长,只要它们符合条件)。

输出

对于每个询问,输出相应的答案,每个答案占一行。

当x和y无法在同一组时,输出-1(比如x的年龄是1, y的年龄是100,K=1,无论谁当队长,x和y两者中,总会有人跟队长的年龄差距超过K,那么输出-1)。

样例输入

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

样例输出

4
3
-1
4

提示

【样例解释】


询问1:当第5个人和第3个人想在一组时,小组成员可以有{1, 3, 4, 5},选择3当队长,而2不可以加入,因为2加入的话,5和2的年龄差距为2,超过K=1了;


询问2:当第2个人和第3个人想在一组时,可以选择{1, 2, 3};


询问3:当2和5想在一起时,无法满足要求;


询问4:当4和1想在一起时,可以选择{1, 3, 4, 5};


【数据规模】


20%的数据:2≤n≤100,0≤ k≤100,1≤ ri, ai ≤100,1≤ q≤ 100;


40%的数据:2≤ n≤1000,0≤ k≤ 1000,1≤ ri, ai ≤ 1000,1≤ q≤ 1000;


60%的数据:2≤ n≤ 104,0≤ k≤ 109,1≤ ri, ai ≤ 109,  1≤ q≤ 104


100%的数据:2≤ n≤ 105,0≤ k≤ 109,1≤ ri, ai ≤ 109,1≤ q≤ 105,1≤ x, y≤ n, x≠y。




~~:

30min,,我能干多少……把题目看懂就花了点时间。

二话不说上暴力吧……Q*N^2的暴力,枚举谁是队长,然后求满足条件的人数。

然后考虑了一下优化:排个序,中间用树状数组判断人数,直接统计。

这样理应可以40分的。。但是没打,只有3min左右了,交了个20分的草草了事。


但是思路没停。继续想着能不能更好。

离线?似乎有一丝道理,但是没太多想法了。就是感觉优化题。


结果题解还是有点不同的……首先需要预处理,

然后用到线段树,树状数组离线处理。

还没去看。。

大概如此吧。



!!:

总分130

排名6

总人数41。。

说实话,

菜得一匹啊……

虽然分数看上去不错,,但是人家至少第一题都A了的啊……

加油吧。。。



原创粉丝点击