• 二模 (15)day1


    第一题:

    题目大意:

    有两个长度为N的序列A和B,在A和B中各任取一个数相加可以得到N2个和,求这N2个和中最小的N个。

    解题过程:

    1.这题是刘汝佳<<训练指南>>上的一道经典例题,考察了堆的运用.

    如果把A,B序列都从小到大排序,那么有:

    A1<=A2<=A3...<=An

    B1<=B2<=B3...<=Bn

    可以把这N2个和用N个递增队列表示出来:

    A1+B1<=A1+B2<=A1+B3...<=A1+Bn

    A2+B1<=A2+B2<=A2+B3...<=A2+Bn

    ...

    An+B1<=An+B2<=An+B3...<=An+Bn

    那么就可以用一个小根堆来维护了,一开始堆里的元素是A1+B1,A1+B2...A1+Bn

    如果当前弹出的是Ax+By,那么把Ax+By+1 加入堆中。

    初始得分100.

     

    2.拓展:如果有N个队列,每个队列取一个数加起来(可以得到NN个和),求最小的N个和该如何做呢?

    因为只要最小的N个,所以可以把队列两两合并。比如有3个队列A,B,C.可以在A,B中各拿一个数,得到最小的N个和,

    形成一个新的队列,这样就变成上面2个队列的问题了。因此只要经过N-1次合并,最后的队列里的元素就是答案。

    时间复杂度O(N2log2N)


    第二题:

    题目大意:

    N个点,M条边,一开始人在S,每分钟后他都可能会到与当前城市直接相邻的城市.询问是否有某一个时刻这个人在所有城市都有可能出现。

    解题过程:

    1.首先自然想到如果图不是联通的,那么答案肯定是NO了,所以下面讨论的都是联通的情况。

    2.正好jc的神模拟题里提到了二分图,就往二分图方面去想想,结果就发现如果这个图是二分图,那么答案也肯定是NO。因为任意时刻,人都是从二分图的一边走到另外一边。

    3.二分图答案是NO,那么如果不是二分图,答案一定就是YES吗?画了下图,发现如果不是二分图,肯定是有奇环的,首先无论起点在哪里,肯定有一个时刻会走到环上,然后一定会有某个时刻环上的所有点都有可能。如果某个时刻环上的所有点都可能,那么之后的所有时刻环上的所有点都有可能。所以就有点类似flood-fill了,把环看成罪犯的老巢,然后罪犯的势力只会慢慢往外扩大,最终占据所有城市。

    4.存无向边的数组又忘记开2倍大了,就悲剧了。。初始得分40分。另外数据有点猛,用递归的并查集判断联通会爆栈说。


    第三题:

    题目大意:

    求从S到T的一条路,要求花费最小且线路总长度不超过C。 一条路线的花费为它经过的点中最大的权值。

    (边权和不超过C的情况下最大点权最小)

    解题过程:
    1.典型的最大值最小问题,可以二分答案mid,删去权值大于mid的点,然后做最短路,看能否到达。就拿来练习堆优化的dijkstra了。 初始得分100.

  • 相关阅读:
    利用BootStrap Table插件实现自己的弹出框分页。
    spring+redis的集成,使用spring-data-redis来集成
    Postgresql/Greenplum中将数字转换为字符串TO_CHAR函数前面会多出一个空格
    将根据时间戳增量数据方案修改为根据批次号增量数据方案
    Postgresql查询出换行符和回车符:
    增量数据,如果下次增量数据存在重复数据,如何解决。
    creating server tcp listening socket 127.0.0.1:6379: bind No error
    echarts的地图点击事件
    Postman 安装及使用入门教程(我主要使用接口测试)
    HTML5 canvas 捕鱼达人游戏
  • 原文地址:https://www.cnblogs.com/vb4896/p/4060278.html
Copyright © 2020-2023  润新知