zoukankan      html  css  js  c++  java
  • 2016-5-24模拟测试

    • T1

      • description
        给出一个(n(leqslant 200))个节点(m(leqslant 40000))的图,现在请你删除一些边,使得每个点最多只有一条入边和一条出边,并且使删掉的边的权值和最小。
      • solution
        将每个点拆成出点和入点两个点,建立费用流模型,跑最大费用流。
        注意是最大费用流而不是最大流下的最大费用,即使去除了负费用的边,本质也没有改变。
    • T2

      • description
        类似bzoj4561
      • notice
        第一次写这道题是通过了的,其中有几个问题需要注意。
        每次加入圆弧时是两端,当curx取到端点时两个的值是相同的,如果直接算y坐标会被视为相同的插不进去。
        于是可以再加入第二关键字,或者使用multiset。
        还有一个方法就是使上半弧向上偏移eps下半弧向下偏移eps,这样key值就不同了。
        bzoj4561我就是这么写的eps取得1e-5
        这次重新写了一遍,竟然WA完了。
        赛后调试的时候发现竟然把eps的类型给成了int,改成double之后通过了测试。
        然而我的g++是4.7.2的,用4.8.1的g++测试竟然还是WA。
        我适当调大eps后通过了测试,因为我是在sqrt()函数里+eps的,导致出现了精度问题,上下圆弧被算作相同的而只加入了一个。
        即使是这样,在删除的时候是会暴露出问题的,如果
    assert(s.find(up) != s.end());
    s.erase(up);
    assert(s.find(down) != s.end());
    s.erase(down);
    

    是会检查出错的。
    然而我一时偷懒了,写成了

    assert(s.find(up) != s.end());
    assert(s.find(down) != s.end());
    s.erase(up);
    s.erase(down);
    

    就没有查出错误

    • T3
      • description
        60个物品,物品权值(a_i leqslant 10^8),10个询问,询问能否凑出(s leqslant 10^9)
      • solution
        这题标程加了一些剪枝通过了所有的测试数据,然而下来随手被卡T。
        lcr手写bitset+手动开O2优化通过了所有的测试数据。
        我用meet in the middle 枚举前20个最大的,后面的用bitset,抵着时限开了(3.5 imes 10 ^ 8)的bitset也通过了所有的测试数据。
        顺便get了手写bitset,加入了《板》。
  • 相关阅读:
    Java 高阶 —— try/catch
    Java 高阶 —— native 关键字与 JNI
    python库学习笔记——分组计算利器:pandas中的groupby技术
    编程模式(schema) —— 表驱动法(table-driven)
    python中元组tuple
    .Net Framwork类库
    SMB带宽限制
    WindDbug应用
    Python学习笔记
    Python递归遍历目录下所有文件
  • 原文地址:https://www.cnblogs.com/showson/p/5525415.html
Copyright © 2011-2022 走看看