noip2002提高组题解

T1.均分纸牌

给出n堆纸牌,每堆a[i]张,总数是n的倍数,每堆只能和相邻的堆移动牌,求最小的次数使得每堆排数相同。

说实话,本来想想就是O(n)的题。。。然后仔细考虑了一下,假设[1,i]的区间纸牌不等于应有的纸牌数的时候,肯定是从[i+1,n]上转移过来的。。那么最直接的方法就是一次移到位,向右一堆多扔少取,一直向右遍历,并统计移动次数即可。

 

T2.字串变换

给出字符串a,b以及变换规则,x->y,表示a中的子串x可以变成y。如果可以再10步内变成b,输出最小步数,否则NO ANSWER!

说实话。。。感觉字符串处理还是算有点坑的吧。。

做的时候完全转移不出来字符串(其实是快好了,有几个小错误,稍微找一下其实能找出来的。。。)

然后,交了很多代码。。基本就是。。dfs,bfs,id-dfs。。。。写了很久,不是TLE就是MLE。。。那个心累啊。。。

然后最后写的是ID-DFS,本来是超时的,然后加了一个map判重就过了。。。

字符串转移的时候,substr函数和replace函数。。。还是要会的吧。。

 

 

T3.自由落体

在高为 H 的天花板上有 n 个小球位置分别为 0,1,2,….n-1。在地面上有一个小车(长为 L,高为 K,距原点距离为 S1)。现在给出小车的速度v,求能接到的个数。

很简单的物理题啊,连公式都说了,只要考虑完整就能A啊。。。

 

T4.矩形覆盖

给出n个点,用k个矩形覆盖全部,要求面积最小。

没来得及打,T2略坑。。。

然后,其实就是一个dp,把所有点按照横纵坐标排序,然后用f[i][j][k]表示[i,j]区间内的点用k个矩形覆盖的最小面积。转移方程就是f[i][j][k]=min(f[i][l][k-1]+(x[j]-x[l+1])*(maxh-minh)).很简单有木有。。。只不过要把横纵坐标的排序优先级换一下再做一次。。。

然而,其实直接模拟不断扩大的矩形,dfs搜索每次由哪个矩形放大来覆盖这个点,也是可以过的。。。

转载于:https://www.cnblogs.com/zcyhhh/p/6785885.html

### NOIP 2017 提高 初赛题目解析 #### Pascal 编程语言的淘汰时间 关于 Pascal 编程语言何时不再被支持的问题,在选项中给出的时间点为 2022 年[^1]。 #### 归并算法最坏情况下的比较次数 对于两个长度均为 n 的有序数 A 和 B 进行归并操作时,如果仅考虑元素之间的比较作为基本运算,则在最坏的情况下,至少需要执行 \(2n - 1\) 次比较才能完成整个过程[^2]。 ```python def merge_sorted_arrays(A, B): merged_array = [] i, j = 0, 0 while i < len(A) and j < len(B): if A[i] <= B[j]: merged_array.append(A[i]) i += 1 else: merged_array.append(B[j]) j += 1 # Append any remaining elements from either list merged_array.extend(A[i:]) merged_array.extend(B[j:]) return merged_array ``` 此代码展示了如何有效地将两个已排序列表合并成一个新的已排序列表,并且在这个过程中进行了必要的比较来决定哪个元素应该先加入到新的列表当中去。当处理到最后一个元素的时候,实际上已经完成了 \(2n-1\) 次比较(假设两部分都含有 n 个不同大小的数),这正好对应于上述提到的最佳下界理论值。 #### 硬币分堆查找不合格品的方法 给定一数量为 n 枚相同外观但可能有一枚质量不同的硬币成的集合 A ,通过天平称重的方式找出那枚众不同的假币: 1. 计算 k 值等于向下取整后的 \(\lfloor{n / 3}\rfloor\); 2. 把这些硬币分为三份 X、Y 和 Z,每一份分别有 k 枚; 3. 如果 X 和 Y 的质量不相等的话,那么继续下一步骤;否则跳转至第 5 步; 4. 对较轻的那一侧进一步分割重复以上步骤直到找到唯一可疑对象为止; 5. 当剩下不超过两枚硬币时直接对比即可判断哪一个是异常者;而只有一枚的情况则默认其就是那个特殊个体[^3]. 这种策略利用了三分法的思想,每次都将待测样本缩小三分之一左右的比例,从而提高了效率同时也简化了解决方案的设计难度.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值