2018-2019 ACM-ICPC, Asia Nanjing Regional Contest

本文介绍了2018-2019年ACM-ICPC亚洲南京区域比赛的题目及解题思路,包括A到M共13道题目。涉及的编程问题包括最小球覆盖、网络流、暴力求解、随机算法等,每道题目都附有相应的解题代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

施工中(8/13)

题目链接:http://codeforces.com/gym/101981

 

A.Adrien and Austin

 

队友写的,没看题

 

代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
int n,k;
void solve()
{
    int flag=1;
    if(n==0)
        flag=0;
    if(k==1&&n%2==0)
        flag=0;
    if(flag)
    {
        printf("Adrien\n");
    }
    else
    {
        printf("Austin\n");
    }
}
int main()
{
    while(~scanf("%d%d",&n,&k))
    {
        solve();
    }
    return 0;
}

D.Country Meow

 

最小球覆盖板题

 

代码:

#include<bits/stdc++.h>
const int MAXN=105;
const double eps=1e-8;
struct Tpoint
{
    double x,y,z;
};
int npoint,nouter;
Tpoint pt[MAXN],outer[4],res;
double radius,tmp;
inline double dist(Tpoint p1,Tpoint p2)
{
    double dx=p1.x-p2.x,dy=p1.y-p2.y,dz=p1.z-p2.z;
    return (dx*dx+dy*dy+dz*dz);
}
inline double dot(Tpoint p1,Tpoint p2)
{
    return p1.x*p2.x+p1.y*p2.y+p1.z*p2.z;
}
void ball()
{
    Tpoint q[3];double m[3][3],sol[3],L[3],det;
    res.x=res.y=res.z=radius=0;
    switch(nouter)
    {
        case 1: res=outer[0];break;
        case 2:
            res.x=(outer[0].x+outer[1].x)/2;
            res.y=(outer[0].y+outer[1].y)/2;
            res.z=(outer[0].z+outer[1].z)/2;
            radius=dist(res,outer[0]);
            break;
        case 3:
            for(int i=0;i<2;i++)
            {
                q[i].x=outer[i+1].x-outer[0].x;
                q[i].y=outer[i+1].y-outer[0].y;
                q[i].z=outer[i+1].z-outer[0].z;
            }
            for(int i=0;i<2;i++)
            {
                for(int j=0;j<2;j++)
                {
                    m[i][j]=dot(q[i],q[j])*2;
                }
            }
            for(int i=0;i<2;i++)
            {
                sol[i]=dot(q[i],q[i]);
            }
            if(fabs(det=m[0][0]*m[1][1]-m[0][1]*m[1][0])<eps)
                return ;
            L[0]=(sol[0]*m[1][1]-sol[1]*m[0][1])/det;
            L[1]=(sol[1]*m[0][0]-sol[0]*m[1][0])/det;
            res.x=outer[0].x+q[0].x*L[0]+q[1].x*L[1];
            res.y=outer[0].y+q[0].y*L[0]+q[1].y*L[1];
            res.z=outer[0].z+q[0].z*L[0]+q[1].z*L[1];
            radius=dist(res,outer[0]);
            break;
        case 4:
            for(int i=0;i<3;i++)
            {
                q[i].x=outer[i+1].x-outer[0].x;
                q[i].y=outer[i+1].y-outer[0].y;
                q[i].z=outer[i+1].z-outer[0].z;
                sol[i]=dot(q[i],q[i]);
            }
            for(int i=0;i<3;i++)
            {
                for(int j=0;j<3;j++)
                {
                    m[i][j]=dot(q[i],q[j])*2;
                }
            }
            det=m[0][0]*m[1][1]*m[2][2]
            +m[0][1]*m[1][2]*m[2][0]
            +m[0][2]*m[2][1]*m[1][0]
            -m[0][2]*m[1][1]*m[2][0]
            -m[0][1]*m[1][0]*m[2][2]
            -m[0][0]*m[1][2]*m[2][1];
            if(fabs(det)<eps) return ;
            for(int j=0;j<3;j++)
            {
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值