zoukankan      html  css  js  c++  java
  • 训练20191009 2018-2019 ACM-ICPC, Asia East Continent Finals

    2018-2019 ACM-ICPC, Asia East Continent Finals

    总体情况

    本次训练共3小时20分钟,通过题数4。

    解题报告

    D. Deja vu of … Go Players

    题意

    (A,B)博弈,(A)(N)堆石子,第(i)堆数量(a_i)(B)(M)堆石子,第(i)堆数量(b_i)。每次每个人可以从自己拥有的石子堆中选取任意一堆并拿走任意正整数个石子。先拿完的人赢。求胜负情况。$N,M leq 100, $ $a_i,b_i leq 10^9, $ (T leq 100)

    题解

    很显然贪心跑得快,只和堆数有关。根据(N,M)的大小关系决定胜负。

    L. Eventual … Journey

    题意

    (n)个点,(m)条双向边长度都是(1),同时点被分为两类,每类点可以花费(1)的代价到任何一个自己同类的点。对所有(i),求

    [sum_{j=1}^n {dist(i o j)} ]

    数据范围(n,m leq 10^5)

    题解

    我们设(d_i)为点(i)与不同于自己类别的点直接相连的数量。设(a_i)为点(i)的类别,取值(0)(1)。设(s_i)为第(i)类点的数量。设(c_i)为第(i)类点中有多少个点与另一类点有边直接相连。

    对于任意的(i),如果

    • (d_i > 0),那么显然点(i)可以花费(1)的代价到任何一个自己同类的点,以及任何一个与自己直接相连的不同类的点,其余的点代价为(2),于是答案为

    [n-1+s_{1-a_i}-d_i ]

    • (d_i = 0),那么显然点(i)可以花费(1)的代价到任何一个与自己同类的点,花费(2)的代价到另一类点中与(i)所在类别点集有边直接相连的点,花费(3)的代价到其余的点。于是答案为

    [3(n-1) - 2(s_i - 1) - c_{1-a_i} ]

    时间复杂度 (O(n+m))

    F. Interstellar … Fantasy

    题意

    给出三维欧几里得空间中两个点的坐标,求不经过一个给定球体的最短路长。

    题解

    稍作思考,发现如果两点连线段与球体不相交则为线段长,若相交,则答案必然为两线段和一弧的和。保留原来的线段并不是最优解,很容易发现,当两线段与球相切时最优。更准确地,整条路经一定在给定三个点确定的平面上,并且平面与球交出的圆与两条线段相切时就是最优解。

    利用点积叉积和矢量定比分点讨论一下即可。

    P3 delt=p-q;
    db len=delt.abs();
    db d=(cross(p-c,q-c).abs())/(len);
    if(d<r) {
        db d1=(p-c).abs(), d2=(q-c).abs();
        db l1=sqrt(d1*d1-r*r), l2=sqrt(d2*d2-r*r);
        db theta = acos(dot(p-c,q-c)/(d1*d2)) - acos(r/d1) - acos(r/d2);
    
        if(abs(((sqrt(d1*d1-d*d)+sqrt(d2*d2-d*d)))*d - (cross(p-c,q-c).abs()) ) < 1e-5)  {
            if(d<1e-5) {
                if(dot(p-c,q-c)>0) cout<<setiosflags(ios::fixed)<<setprecision(10)<<len<<endl;
                else cout<<setiosflags(ios::fixed)<<setprecision(10)<<r*theta + l1 + l2<<endl;
            }
            else cout<<setiosflags(ios::fixed)<<setprecision(10)<<r*theta + l1 + l2<<endl;
        }
        else cout<<setiosflags(ios::fixed)<<setprecision(10)<<len<<endl;
    }
    else cout<<setiosflags(ios::fixed)<<setprecision(10)<<len<<endl;
    
  • 相关阅读:
    测试软件—禅道BUG管理工具
    C语言 线性表的操作~(未完)
    数据库考纲~
    圣杯布局和双飞翼布局总局
    总结布局用法
    springboot~入门第三篇~与mybatis整合~(未完)
    微信小程序里 wx:for和wx:for-item区别(补充下wx:key)
    对比下小程序语法和Vue语法异同
    视频转换 rtsp 流 转rtmp流播放(待完善)
    Vue钩子函数~
  • 原文地址:https://www.cnblogs.com/mollnn/p/11645717.html
Copyright © 2011-2022 走看看