AcWing周赛61

2022年7月24日 下午6:08 比赛总结 ,

比赛链接:AcWing周赛61 - AcWing
本次迟到了几分钟,所以选择的大可的号来打周赛嘿嘿,怕自己的大小号掉分,这波C特殊情况没有考虑到,但是人均wa1发,我wa了2发。如果写好不wa的话应该能再获得一顶AC帽。

过题数:3/3
排名:29/1950

过题数 罚时 A(1104/1572) B(706/2120) C(209/1886)
3 0:50:23 0:03:44 0:07:09 0:29:30 (-2)

A.分糖果(签到)

输出$\left \lfloor \frac{a+b+c}{2} \right \rfloor $即可
我甚至都不想放代码,这都能有人不能AC..

B.指针(状压枚举)

题意:你有一个罗盘(地质三件宝)一开始指针指向$0$,给你$n(1\leq n\leq 15)$个数$a_i$,代表旋转$a_i$度,你可以选择其顺时针旋转还是逆时针旋转,求问最后是否能够重新回到$0$。

思路:状压枚举每一个状态,定义每一位若为1表示顺时针+,若为0表示逆时针-,对每一个状态的每一位分析即可。

代码

inline void Case_Test()
{
    cin>>n;
    for (int i=0;i<n;i++) cin>>a[i];
    for (int state = 0; state<(1<<n); state++)
    {
        int res = 0;
        for (int i=0;i<n;i++)
        {
            if (state&(1<<i))
                res += a[i];
            else 
                res -= a[i];
        }
        res = res % 360;//因为可能有负数,我一开始写的是res=(res+360*100)%360;
        //但是仔细一想如果有负数,那么一定有他的相反数(完全相反的状态),所以只需要取模360即可
        if (res==0) {cout<<"YES"<<endl;return;}
    }
    cout<<"NO";
}

C.画圆(计算几何)

题意:给你一个圆(x,y,r)以及一个点(qx,qy),你需要重新画一个圆,这个圆不能包括这个点,但是可以在你画的圆上,求给你的圆剩下的面积最小的时候,你画的圆的圆心坐标以及半径

思路:直接套龙的板子。其实也就是点(qx,qy)和圆心的直线,会与圆交于两点,然后肯定选择更长的那条线段组成一个更大的圆。
需要注意:1)点重合情况,那么就输出右边的(题目...);2)点在圆外情况,那么输出给你的圆即可,画一个一模一样的。

代码
代码八百行...

inline void Case_Test()
{
    cin>>r>>x>>y>>qx>>qy;
    Circle c(Point(x,y),r);
    if (c.pointIn(Point(qx,qy)))//点在圆内
    {
        if (qx==x&&qy==y)//如果重合 特殊判断
        {
            cout<<fixed<<setprecision(6)<<x+r/2.0<<" "<<y<<" "<<r/2.0<<endl;
            return;
        }
        Line l(Point(qx,qy),Point(x,y));//组成一条直线
        vector<Point> vec = lineCircleIntersection(l,c);//求直线与圆的两个交点
        Point res;
        if (dis(Point(qx,qy),vec[0])>dis(Point(qx,qy),vec[1]))
            res=vec[0];
        else
            res=vec[1];//判断距离与(qx,qy)远的那个点
        double ans = dis(Point(qx,qy),res)/2.0;//二者为直径就是答案所需要的圆
        cout<<fixed<<setprecision(6)<<(qx+res.x)/2.0<<" "<<(qy+res.y)/2.0<<" "<<ans<<endl;
    }
    else
        cout<<fixed<<setprecision(6)<<x<<" "<<y<<" "<<r<<endl;//点不在圆内,直接就是题目所给的圆,符合题意
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注