noip2003提高组题解

T1.神经网络

给出n个点,m条有向边,i到j的边权为Wij,每个无入边的点有ci的活力,其他点为零,每个点有一个ui。对于出发点而言,ui没有什么卵用,它会向所有指向的店发送强度ci的信号,接收的点的活力值为:  然后求无出边的点的活力值。

只要理清拓扑结构即可。先将出发点入队,然后依次将下一层的访问到入队。显然,访问到下一层的节点前,当前层的信号都已经发送完了。这样只要把出边为零的点依次输出就好了。

 

T2.侦探推理

给出m个人,n个人说假话,给出p句证词,只有一下几种有用:

 

然后,输入的格式大约是这样的:

3 1 5

MIKE

CHARLES

KATE

MIKE:I am guilty.

MIKE:Today is Sunday.

CHARLES:MIKE is guilty.

KATE:I am guilty.

KATE:How are you??

然后要求出谁是罪犯。。。如果不能判断输出Impossible,可能有多个位Cannot Determine

这是很烦的搜索题。。。我的搜法是,先dfs出说谎的n个人,然后按证词一句句判断每句话是否矛盾。。这样只要看能不能有一种情况使得能判断出只有一个罪犯即可。。或者判断出的都是多个罪犯。。。或者不成立。字符串处理的时候还是有点烦的。。。可以先处理几个模板串。。。(自己测和老师电脑测都能过。。然而oj就是WA)

 

T3.加分二叉树

给出n个节点的分值,要组成一棵中序遍历为(1~n)的树,没棵子树的加分值定义为根节点的左右子树加分值之积加上根节点的分。求最大加分值的树的分数和前序遍历

只要f[i][j]表示[i,j]的最大分值,root[i][j]表示取到最大值时的根。。

显然只要f[i][j]=max(f[i][k-1]*f[k+1][j]+a[k])即可。

 

T4.传染病控制

给你n个点构成一棵以1节点为根的数。每个周期可以切断其中一条边,然后每个上一层的有病的节点会感染下一层能连到的节点。求切断后能得到的最少感染人数。

按层数先建树,然后对于每一层,先枚举当前节点能否连接到根节点(路径是否已经被切断),然后只要把当前能扩展的节点扩展掉然后处理下一层就好了。。。复杂度居然也是够的。。。。【懵】

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

余额充值