zoukankan      html  css  js  c++  java
  • 2020.01.19【NOIP提高组】模拟比赛-1.水池,2.数字排序,3.球星,4.钻石交易 总结反思

    水池

    比赛时

    我最讨厌这种数学类题了,我首先想到了这几种情况,设(jl[][])表示两点之间弧的距离,从F到G可以由

    1. F->G
    2. F->B->A->G
    3. F->A->B->G
      路径到达,那么,关键就是求弧长了,我于是自己乱写了一个式子,结果样例都没有过,一看时间已经去了很多了,于是放弃了,我觉得很多人会AC.

    之后

    居然没有人比赛时A了这道题,这题正解三角函数,初中的蒟蒻我还没学~~~
    求弧长可以用两点之间的距离先求出圆心角,然后就可以通过圆心角求出弧长了。具体做法等我后续更新

    数字排序

    比赛时

    第一眼看就觉得像我们昨天刚做过的题,注意到只有两行数,于是回忆起了昨天的题解中对只有两行数的解法——是二分,但是又回忆不起具体内容来,于是死命得想二分,想了很久,终于想到了一种二分套二分的解法。
    我们可以二分答案,那最关键的就是如何判断当前二分到的mid合不合法,mid合法,当且仅当有小于k个数严格小于它,于是,这个问题就转化为了如何求小于mid的有多少个数,考虑到只有两行数,且(n leq 10000) ,那么可以枚举i,求出(a_i*b_j(1 leq j leq m)) 有多少个严格小于mid,于是我们可以预先对b排序,然后用二分求出最后一个(a_i*b_j < mid)的下标,那么对于这个i,(a_i*b_j(1 leq j leq m) < mid)的就有下标个数。于是这题就解决了。

    之后

    我们机房的大佬XYX跟我的思路差不多,但是它没有嵌套的二分,而是用了一个前缀和表示小于mid的有多少个数,具体怎么做unknow

    球星

    比赛时

    仔细看以为是什么主席树等数据结构,因为要求11大,可我还没学,于是果断弃疗。

    之后

    题解的做法时线段树+归并排序的思想,线段树采用动态开点,或者也可以用离散化;归并排序的思想就是对于两个已经有序的序列a,b,我们只需要一重循环就可以将a,b合并(所以叫归并)为有序的数列c,这样就可以轻轻松松得求出每个区间的11大。

    钻石交易

    比赛时

    思考了一会儿,脑子一直在瞎编乱造——最小费用最大流?BFS?状压DP?
    看到(m leq 10) ,于是决定采用状压DP,设(f[s][i]),s表示宝石的状态——卖或没卖,i表示当前在第i个城市,那么,处在当前这个状态,我们可以选择1.在当前城市卖掉宝石 2.不卖宝石走到其他城市
    于是就简简单单得打了几个循环

    之后

    拿了30分,答案错误。我没有考虑到一种情况——在当前s状态下,我们可以在剩余钱大于0时走到其他城市,这就相当与最短路径问题,而如果我们单单顺序枚举更新f,会找不到最优答案。正解:状压DP+dijk堆优化,状压DP主要处理卖宝石的情况,dijk主要处理在不卖宝石的情况下走到其它城市的情况,状压DP里面套dijk。

    总结

    1. 对于求区间前k小的题目(k是固定的!),我们可以用线段树实现
    2. 对于状压DP但是顺序枚举不能保证最优解的题目,可以在状压DP内套xxx保证最优解
  • 相关阅读:
    webserver服务器
    轮子哥的网站地址
    构建javaweb服务的docker镜像和容器化启动服务
    spring-cloud-alibaba-gateway
    markdown-记笔记常用语法
    java-生成公私钥命令
    阿里云oss文件服务器
    mybatis-mapper.xml一个标签支持执行多个sql语句
    docker安装nacos
    spring-cloud-alibaba-nacos
  • 原文地址:https://www.cnblogs.com/cjz-IT/p/contest20200119.html
Copyright © 2011-2022 走看看