zoukankan      html  css  js  c++  java
  • 模拟92 题解

    A. 数列

    要求$ax+by=s$,使得$abs(x)+abs(y)$最小的一组解$(x,y)$。

    首先用$exgcd$求出一组特解$(x_1,y_1)$。

    因为$a,b$均为正数,可以将$s$转化为正数。

    不妨将解$x,y$画到一个坐标系上,

    显然$abs(x)+abs(y)$在$x$接近$0$或$y$接近$0$的时候取得最小值,所以分别试一下就完了。

    B. 数对

    当问题转化为不以任意顺序排序,显然是线段树优化$dp$。

    所以应该排序后$dp$?

    然而并没有找到拓扑序,于是就完戏了。

    正解是将每个元组以$a+b$为基准排序。

    证明可以分类讨论,

    考虑每个元组对$(i,j)$,显然我们只关注二者$a$,$b$交叉的大小关系确定先后顺序。

    当$a_i<b_j,b_i<a_j$,将$j$放在$i$的后面可以使这个元组对合法,反之则不行。

    当$a_i>b_j,b_i>a_j$,情况类似。

    当$a_i<b_j,b_i>a_j$,无论怎么放元组对都是合法的。

    当$a_i>b_j,b_i<a_j$,无论怎么放元组对必死。

    综上可以得出按$a_i+b_i$为基准排序的结论。

    C. 最小距离

    一眼二进制分组???

    将每个二进制位下为$0$的点同时设为起点跑最短路,更新该位下为$1$的答案。

    同理用$1$的点更新$0$。

    然后复杂度$O(nlog^2)$,疯狂卡常,极限数据仍然要$2s$多。

    改成$spfa$,假装不会被卡,极限数据本机跑了$1s$左右,

    最后感觉多半是完戏了,果然被卡成50分。

    正解是将所有特殊点同时设为起点,只跑一次最短路,同时记录下距离每个点最近的特殊点。

    枚举每一条边,用这条边的权值加上两个连接点的$dis$更新两个特殊点的答案。

    这样做的正确性似乎是显然的,然而没有想到。

    当一条边更新了特殊点对$(a,b)$的答案,显然这个点对的问题是没有问题的。

    如果同时存在一个点$c$,这个答案也会在其它地方被更新。

  • 相关阅读:
    企业管理:“残缺”也是一种美?
    销售到出仓所经历的表
    采购到入库所经历的表
    OM 订单状态
    OM客户、客户地点
    接收事务处理类型 rcv_transactions
    安装ORACLE不能安装解决方法
    系统变量设置
    如何取分组最大值记录
    CentOS (Linux) 上开启FTP服务并配置用户
  • 原文地址:https://www.cnblogs.com/skyh/p/11758737.html
Copyright © 2011-2022 走看看