2019暑期集训 - Day 25
Final test ,还行
概述
提高 B 组
4题:T0 , T1 , T2 , T3
310/400 分
4/53 名
T0 香烟
AC 100/100 分
Description
你现在有 \(n\) 支香烟。香烟抽完后有香烟蒂头。 \(k\) 个香烟蒂头可以换一支新的香烟。\((k>1)\)现在一开始有 \(n\) 支香烟,问最多能抽多少支烟?只能利用你现有的烟,不能向别人借烟。
Input
一行,两个整数, \(n\) 和 \(k\) 。两个整数均在 longint 范围之内,答案也在 longint 范围之内。
Output
输出只有一个数, 表示最多能抽多少支烟.
Sample Input
4 3
Sample Output
5
Solution
模拟
就是照题意模拟呗,有什么好说的吗?
T1 背包问题
AC 100/100 分
Description
从 \(T\) 组物品中选出一些物品,放入背包中,求剩余空间的最小值。
限制条件:从每组物品中挑选物品必须要选取连续的一段。就是说,如果这组物品共有 \(n\) 个: 物品 \(1\) ,物品 \(2\) ,物品 \(3\) , \(\cdots\) ,物品 \(n\) ,那么只能选取物品 \(i\) ,物品 \(i+1\) , \(\cdots\) ,物品 \(j\) ,其中 \(1\le i\le j\le n\) ,或者不选。
Input
第一行为两个用空格隔开的正整数 \(v\) 和 \(T\) 。表示背包的空间和物品的组数。接下来有 \(T\) 行,每行先是一个正整数 \(h\) ,表示这组物品有 \(h\) 个,然后 \(h\) 个正整数,表示每个物品的大小。
Output
仅一个数,表示剩余空间的最小值。
Sample Input
100 3
3 7 6 8
2 80 70
4 101 108 103 150
Sample Output
6
Hint
【样例说明】
第 1 组选 6 、8,第 2 组选 80 ,第 3 组不选。
【数据范围】
60% 的数据满足: \(1 \le h \le 10\)
100% 的数据满足: \(1 \le h \le 100\ ,\ 1\le v\le 5000\ ,\ 1\le T\le 10\)
Solution
DP
设 \(f[i][j]\) 代表前 \(i\) 组物品能否取到刚好 \(j\) 的空间。
先记录每组物品的空间前缀和,然后可以 \(O(h^2)\) 枚举每组物品单独能取出那些空间, \(c[i][j]\) 代表单独第 \(i\) 组物品能否取到刚好 \(j\) 的空间。
然后 \(f[i][j]=f[i-1][k]\ \&\&\ c[i][j-k]\ \ (0\le k\le j)\) ,因为 . . . 因为这显然啊 . . .
然后答案就是最大的 \(ans\) 满足 \(f[T][ans]=true\)
没了
T2 破碎的路径
AC 100/100 分
Description
比尔去很多地方旅游过。他在旅游的同时留下了很多简短的旅行笔记。笔记的形式是这样的:
出发地 目的地
如下面就是三条合法的 \(note\):
SwimmingPool OldTree
BirdsNest Garage
Garage SwimmingPool
在某一次搬家的时候,比尔的笔记本不小心散架了。于是他的笔记的顺序被完全打乱了。他想请你帮个忙,帮他把这些笔记的顺序整理好,先写的笔记在前面。幸运的是,同一个地方比尔至多只去过一次。也就是说,在这些笔记当中,一个地方至多出现两次,一次作为目的地,一次作为出发地。
Input
第一行是一个整数 \(n\) ,表示笔记的条数。 \(n\le12000\) 。接下来有 \(n\) 行,每行一条笔记。笔记的两个单词的长度都不会超过 \(15\) ,两个单词之间以一个空格分隔。
Output
输出整理好顺序的笔记。
Sample Input
3
SwimmingPool OldTree
BirdsNest Garage
Garage SwimmingPool
Sample Output
BirdsNest Garage
Garage SwimmingPool
SwimmingPool OldTree
Hint
对于50% 的数据, \(n \le 1000\) 。
对于100% 的数据, \(n \le 12000\) 。
Solution
这题这么简单啊
用 map 瞎搞不就好了?
有必要再写什么哈希之类的东西吗?
T3 无线网络
WA 10/100 分
Description
有一个由n台计算机组成的无线网络。 \((n \le 1001)\) ,正常情况下,每台计算机都能跟与它距离不超过 \(d\) 的任何计算机通讯 \((d \le 20000)\) 。地震发生了。所有的计算机都陷入瘫痪。专家们试着一台一台地修复计算机,以恢复整个无线网络。有时在修复的过程中,他们需要测试一下某两台计算机能否通讯(如果他们能通过别的正常的计算机进行通讯,也算他们之间可以通讯,即“能否通讯”可以是间接的)。
你的任务,就是模拟修复网络的过程,并回答“能否通讯”的询问。
Input
第一行两个整数, \(N\) 和 \(d\) , \(N\) 表示计算机的数目, \(d\) 表示两台计算机直接可直接通讯的最大距离。接下来的 \(N\) 行,每行两个整数 \(X_i,Y_i\) ,表示每台计算机的坐标。接下来有许多行,每行都是一个操作(或者是修复操作,或者是询问操作)。
操作的格式如下:
O p \((1 \le p \le N)\) 修复操作,表示修复编号为p的电脑;
S p q \((1 \le p, q \le N)\) 询问操作,询问编号为 \(p\) 和编号为 \(q\) 的电脑能否通讯。
如果一台电脑尚未被修复,则它不能和任何电脑通讯。
Output
对于每个询问操作:如果能够通讯,输出一行 SUCCESS ;如果无法通讯,输出一行 FAIL
Sample Input
4 1
0 1
0 2
0 3
0 4
O 1
O 2
O 4
S 1 4
O 3
S 1 4
Sample Output
FAIL
SUCCESS
Hint
对于50% 的数据, \(N \le 300\) , 操作次数 \(\le 10000\);
对于100% 的数据, \(N \le 1001\) , 操作次数 \(\le 300000\)。
Solution
并茶几 并查集
每次加点就把它能到的所有点都和它合并。
查询时就查两个点是否在一个集合中。
注意输入输出千万别用 cin cout !千万别用 cin cout !千万别用 cin cout !
cnblogs
刚建好的cnblogs博客
原版界面太丑了
所以我决定自定义一个页面
参考了来自 Github BNDong 的开源主题
做了如下一些更改:
更改背景、头像;
去掉一些累赘的链接;
干掉页面下方的小脸(my-face) <(-︿-)>
改了字体
修正了 Markdown 和 LATEX 的显示问题(至少改成我喜欢的样子)
加了标签
还去掉了若干我认为不应该出现的小东西(我也列不全 . . . )
不准备发出来共享(怕有版权的问题,也不敢拿出来)

浙公网安备 33010602011771号