noip2005提高组题解

本文详细解析了奖学金分配算法,包括院士奖学金、五四奖学金等多种类型,通过设定成绩、论文及地区条件,找出获得奖金最多的学生。同时,探讨了过河、篝火晚会等算法问题,提供了详细的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T1.谁拿了最多的奖学金

给出n个学生的信息,分别表示:姓名,期末成绩,班级评议成绩,是否学生干部(Y/N),是否西部学生(Y/N),论文数;

奖学金分为:

1).院士奖学金,每人8000 元,期末平均成绩高于80 分(>80),并且在本学期内发表1 篇或1

篇以上论文的学生均可获得;

2).五四奖学金,每人4000 元,期末平均成绩高于85 分(>85),并且班级评议成绩高于80 分

(>80)的学生均可获得;

3).成绩优秀奖,每人2000 元,期末平均成绩高于90 分(>90)的学生均可获得;

4).西部奖学金,每人1000 元,期末平均成绩高于85 分(>85)的西部省份学生均可获得;

5).班级贡献奖,每人850 元,班级评议成绩高于80 分(>80)的学生干部均可获得;

求得奖金最多的人,最多奖金数,总奖金数。

 

直接每个模拟过去,一一对照条件就行了。

 

 

 

T2.过河

给出一座桥长为L(10^9),有一只青蛙过桥,每次可跳[s,t]的距离。桥上有m(100)个石子,给出位置。求过桥能踩到最少的石子数。

显然一看距离和石子数不成比例啊。。。。中间大段大段的完全可以去掉嘛,所以只要缩一下距离,保证两颗石子间距离%t不变就好。(防止错误可以加几个t)【这点是我忽略的所以WA了两个点吧。。】然后就可以dp了,f[i]表示到坐标为i的点踩到的最小石子数,则f[i]=max(a[i]+f[i-k])【s<=k<=t】

 

T3.篝火晚会

给出n个人,坐成一圈,每个人有最想坐在两边的人,求出从(1~n)的序列变成目标序列的代价,或者不可能则输出-1。(交换规则:每次令{b1,b2,b3…bm},b1换到b2,b2换到b3……,代价位m)。

说起来。。。其实没有说顺序的话,只换一次最优了吧。。。毕竟总是要连成一个环的,所以题目就是找出不在位的个数。先判断是否可能,只要判断每个人想坐的人是否也想和他坐就行了。。然后就可以生成目标序列,再判断出以当前方式排列,每个位子到目标位子的位数差,然后对于每个位数差取一个最大值就好了。(毕竟环可以旋转。。)

 

 

 

T4.等价表达式

给出个含未知数a的中缀表达式,以及n个其他的含a表达式,求哪几个始终等于给出的那个。。

显然不是数学的因式分解啥的。。。应该是把几个a的值代进去检验。。

然后就涉及了中缀表达式运算的过程,这个我的博客上也写了。。http://www.cnblogs.com/zcyhhh/p/5933945.html

然后其实那个代码有点冗长。。。毕竟我这次的就200行而已。。上次的主要是因为有重复代码,然后处理括号比较清奇。。。然后其实可以把calc函数带上操作字串作为一个参数,这样每次substr取一下还是比较快的。。。然后就可以全都用一个函数解决,不用main函数的长篇大论了。。。

转载于:https://www.cnblogs.com/zcyhhh/p/6785901.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、付费专栏及课程。

余额充值