zoukankan      html  css  js  c++  java
  • 训练日志2

    这几天主要是在打比赛 计算几何写了一些推公式的题

    UVALive 4413

    相当于按比例 构造出一种小三角形 想求原来的大三角形

    这道题用到了 梅涅劳斯定理 链接

    简单来说就是一条过三角形三边所在直线的直线 有 AD * BE * CF = BD * CE * AF

    证明也比较简单

    应用到这题就是由三条直线和三个小三角形得到三个方程 解出来对应比例就可以了

    POJ 2208

    给你四面体六条边 求体积

    欧拉四面体公式 链接

    写的时候也并没有用公式 直接建系 也是可以算的

    UVA 11524

    给你一个未知三角形的内切圆以及它将三角形各边分成的比例 求三角形面积

    = =就很气 刚开始的时候求角度算精度出了问题 卡了好久也没成功

    后来换了一种做法 假如一边边长为1 则其他边可由比例推出来是多少 

    记该情况下半周长为 p 而实际半周长为 k * p

    由面积比例关系可以得到 k * p * R = k * k * S

    S为当前假设的三角形的面积 是sqrt(p * (p - a) * (p - b) * (p - c)) (这里的abc是假设的边长)

    可得k = p * R/ S

    所以真正的面积是 (p * R) ^ 2 / S

    精度确实比较好了。。。

    UVALive4714

    和上题类似 感觉更简单了 注意寻找等量关系就行 这里用的是大圆和小圆的圆心距

    剩下的还有百度之星初赛Round A的 1002

    题意大概是 给你n个约束关系 有 x = y , x != y两种

    现在把n个约束关系按照顺序划分成k组 每组只有最后一个关系不成立 前面的都成立

    问分的组数和每组约束关系的数量 n <= 10 ^5

    刚开始很naive 以为 x = y非法时 只有 x != y 其实和加入的集合也有关系了

    我们很容易想到并查集维护相等的关系 至于不等关系 在潘学姐的提示下想到启发式

    我开了两个set一个存储并查集的集合元素 另一个存储与当前集合有冲突的元素有哪些

    在 x != y 时可以直接用并查集判是否成立

    在 x = y时 我们遍历较小的集合中的元素 看是否在大集合的冲突集合中出现过

    合并时把较小的set插到大的里面去 冲突集合也同样合并

    总体复杂度nlog^2n 实际上跑得飞快

    最近的感受就是自己代码力欠缺

    打百度之星的时候 水题总是敲错 敲的时候很犹豫 敲完也很方 就很难受

    在计算几何的精度方面还是模棱两可

    拿今天训练的A来说

    先是读错题意 以为A B都在圆内 误导了潘学姐和自己 一下子神话了这道题

    之后自己发现很简单 开始敲之后 感觉考虑的很全面 手出几组感觉可以 交上去确实WA

    就很难受 在WA了几发之后才A

    原因是eps设置的太小 改成1e-6才过

    其实题目中给出的坐标的范围是有意义的

    我后来才是在极限大的数据下发现了 比较的数字比较大 小数后几位可能不准确 才调大了eps

    以后的题目在写完时 应该试着出一些比较大的简单数据 看是不是够精度(如果可以出的话

    debug时确定算法正确性的情况下 也应该考虑一下用到eps的数字的大小 是比较大还是比较小

    接下来想看看圆的反演 和 一些不确定算法和极值的 题目吧

     

  • 相关阅读:
    HDU 6166
    codeforces 798D Mike and distribution
    Codeforces Round #409 (Div. 2) D Volatile Kite
    Codeforces Round #409 (Div. 2) C Voltage Keepsake(二分)
    HDU 4609 3-idiots(FFT计数)
    LightOJ 1236 Pairs Forming LCM(算术基本定理)
    HDU 1540 Tunnel Warfare(线段树,单点更新,区间查询)
    创建最简单的Struts2项目
    java自定义拦截器
    java拦截器和过滤器的区别
  • 原文地址:https://www.cnblogs.com/drzdk/p/7354439.html
Copyright © 2011-2022 走看看