2020.04.15【NOIP普及组】模拟赛C组26总结

这次考试总分290,第五,有4个AK比赛的大佬,具体的失分,我等下讲。

T1【USACO 2019 January Silver】Grass Planting

题目:

题目描述
到了一年中Farmer John在他的草地里种草的时间了。整个农场由N块草地组成(1≤N≤10^5),方便起见编号为1…N,由N−1条双向的小路连接,每块草地都可以经过一些小路到达其他所有的草地。
Farmer John当然可以在每块草地里种不同种类的草,但是他想要使得使用的草的种类数最小,因为他用的草的种类数越多,他就需要负担更高的花费。
不幸的是,他的奶牛们对选择农场上的草表现得十分苛刻。如果两块相邻(由一条小路直接相连)的草地种了同一种草,或者即使是两块接近相邻(均可由一条小路直接连向同一块草地)的草地,那么奶牛们就会抱怨她们进餐的选择不够多样。Farmer John能做的只能是抱怨这些奶牛,因为他知道她们不能被满足的时候会制造多大的麻烦。
请帮助Farmer John求出他的整个农场所需要的最少的草的种类数。

输入
输入的第一行包含N。以下N−1行每行描述了一条小路连接的两块草地。

输出
输出Farmer John需要使用的最少的草的种类数。

样例输入
4
1 2
4 3
2 3

样例输出
3

提示
在这个简单的例子中,4块草地以一条直线的形式相连。最少需要三种草。例如,Farmer John可以用草A,B和C将草地按A - B - C - A的方式播种。

思路:

这应该算水题一道,直接统计图里每个结点连了几个结点,最后输出最大值加一


T1【USACO 2019 January Silver】Grass Planting

题目:

题目描述
Farmer John要开始他的冰激凌生意了!他制造了一台可以生产冰激凌球的机器,然而不幸的是形状不太规则,所以他现在希望优化一下这台机器,使其产出的冰激凌球的形状更加合理。
机器生产出的冰激凌的形状可以用一个N×N(1≤N≤1000)的矩形图案表示,例如:
在这里插入图片描述
每个’.‘字符表示空的区域,每个’#‘字符表示一块1×1的正方形格子大小的冰激凌。
不幸的是,机器当前工作得并不是很正常,可能会生产出多个互不相连的冰激凌球(上图中有两个)。一个冰激凌球是连通的,如果其中每个冰激凌的正方形格子都可以从这个冰激凌球中其他所有的冰激凌格子出发重复地前往东、南、西、北四个方向上相邻的冰激凌格子所到达。
Farmer John想要求出他的面积最大的冰激凌球的面积和周长。冰激凌球的面积就是这个冰激凌球中’#‘的数量。如果有多个冰激凌球并列面积最大,他想要知道其中周长最小的冰激凌球的周长。在上图中,小的冰激凌球的面积为2,周长为6,大的冰激凌球的面积为13,周长为22。
注意一个冰激凌球可能在中间有“洞”(由冰激凌包围着的空的区域)。如果这样,洞的边界同样计入冰激凌球的周长。冰激凌球也可能出现在被其他冰激凌球包围的区域内,在这种情况下它们计为不同的冰激凌球。例如,以下这种情况包括一个面积为1的冰激凌球,被包围在一个面积为16的冰激凌球内:
在这里插入图片描述
同时求得冰激凌球的面积和周长十分重要,因为Farmer John最终想要最小化周长与面积的比值,他称这是他的冰激凌的“冰周率”。当这个比率较小的时候,冰激凌化得比较慢,因为此时冰激凌单位质量的表面积较小。
输入
输入的第一行包含N,以下N行描述了机器的生产结果。其中至少出现一个’#'字符。

输出
输出一行,包含两个空格分隔的整数,第一个数为最大的冰激凌球的面积,第二个数为它的周长。如果多个冰激凌球并列面积最大,输出其中周长最小的那一个的信息。

样例输入
6
##…
…#.
.#…#.
.#####
…###
…##

样例输出
13 22

参考:OJ2——1119细胞

思路:

这就是一个失分点,我们拿80分或90分都是因为用了DFS,最后一个数据点爆栈。
DFS做法:我就不多说了,值得一提的是如何求周长,方法是对于同一个雪糕球,找一下四周,有几个空位,C就加一。
BFS做法:我也不多说了,和DFS差不多,值得一提的是加滚动数组时,记得把最外层的while(l<r)改成while(l!=r)。


T3【USACO 2019 January Silver】Mountain View

题解链接

题目:

题目描述
从农场里奶牛Bessie的牧草地向远端眺望,可以看到巍峨壮丽的山脉绵延在地平线上。山脉里由N座山峰(1≤N≤10^5)。如果我们把Bessie的视野想象成xy平面,那么每座山峰都是一个底边在x轴上的三角形。山峰的两腰均与底边成45度角,所以山峰的峰顶是一个直角。于是山峰i可以由它的峰顶坐标(xi,yi)精确描述。没有两座山峰有完全相同的峰顶坐标。
Bessie尝试数清所有的山峰,然而由于它们几乎是相同的颜色,所以如果一座山峰的峰顶在另一座山峰的三角形区域的边界上或是内部,她就无法看清。
请求出Bessie能够看见的不同的山峰的峰顶的数量,也就是山峰的数量。
输入
输入的第一行包含N。以下N行每行包含xi(0≤xi≤109)和yi(1≤yi≤109),描述一座山峰的峰顶的坐标。

输出
输出Bessie能够分辨出的山峰的数量。

样例输入
3
4 6
7 2
2 5
样例输出
2

提示
在这个例子中,Bessie能够看见第一座和最后一座山峰。第二座山峰被第一座山峰掩盖了。

思路:

这可能类似以前的 一道题,那里我用的是STL模板,其实也能用堆做,但这都是优化,而这次这道题没法优化,可能数据太水,O(n^2)竟然过了。

我的方法是先以高度排序(降序),然后依次遍历一遍,如果没被前面的山覆盖,那就ans++。

可能有人会问,为什么要排序呢?我们可以想一想,高的山一定不可能被小的山覆盖,所以从高往低,可以算是一种优化吧?

可能又有人会问,如何判断它是否被前面的山覆盖呢?很简单,遍历比它高的山且那座山没被覆盖,如果y1-abs(x-x1)>y,那么x,y这座山就被覆盖了。


总的来说这次考试分数还行,但本来该拿300的,下次要估计好数据,不要在用DFS爆栈了。

原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13159899.html