HUNNU新生赛第一场2022/10/20

地理题

https://ac.nowcoder.com/acm/contest/43597/A

第一篇题解给新生赛QWQ

A.https://ac.nowcoder.com/acm/contest/43597/A

思路:输出样例即可

代码:

using namespace std;

int main()
{
    cout<<"ChangSha ZhuZhou XiangTan";
    return 0;
}

B.https://ac.nowcoder.com/acm/contest/43597/B

思路:利用平方公式计算距离,并比较大小

代码

using namespace std;

int main()
{
    int x1,x2,y1,y2;
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    if(((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))<=100) cout<<"YES";
    else cout<<"NO";
    return 0;
}

C.https://ac.nowcoder.com/acm/contest/43597/C

思路:数据不超过100,直接枚举兔子的只数,有符合要求的情况记录并输出,遍历完毕无符合要求的情况则输出-1。此题也可以数学方法。

代码:

using namespace std;

int main()
{
    int h,t;
    scanf("%d%d",&h,&t);
    bool ans=false;
    for(int i=0;i<=h;i++)
    {
        if(2*i+(h-i)*4==t){
            ans=true;
            printf("%d %d",i,h-i);
        }
    }
    if(!ans) printf("-1 -1");
    return 0;
}

D.https://ac.nowcoder.com/acm/contest/43597/D

思路:列出n较小的情况易知alt(第一行第二行要交换) ,这是A在1-3次中可以作出选择的情况,那么n>4时,肯定尽量要达成让自己立场的本人胜或对方立场的对手胜,规律大家可以自行在草稿纸上寻找。

注意:不要忘记n=2的特判!(狠狠划掉)

注意:n=2的时候先手本人胜,是n=1是对手胜,学姐脑子糊掉惹!!!alt

代码:

using namespace std;

int main()
{
    int n;
    cin>>n;
    if(n==2||(n%4==1)) printf("Alex");//狠狠划掉“n==2”
    else printf("Bob");
    return 0;
}

E.https://ac.nowcoder.com/acm/contest/43597/E

思路:令方程为y=kx+b,算出k。

(1)k不存在。即直线与y轴平行,直接比较x的值即可。

(2)k存在。通过k分别求出直线1,直线2,和过n的平行直线的b值,然后比较判断

代码:

using namespace std;
int main()
{
    int x1,x2,x3,x4;
    cin>>x1>>x2>>x3>>x4;
    int y1,y2,y3,y4;
    cin>>y1>>y2>>y3>>y4;
    int n1,n2;
    cin>>n1>>n2;
    if(x3-x1!=0){
        double k=(x4-x2)*1.0/(x3-x1);
    double d1=1.0*x2-1.0*k*x1;
    double d2=1.0*y2-1.0*k*y1;
    double d3=1.0*n2-1.0*k*n1;
    if(d2>d1)
    {
        if(d3>d2) printf("2");
        else if(d3<d2&&d3>d1) printf("0");
        else printf("1");
    }
    else if(d1>d2)//即k不存在
    {
        if(d3>d1) printf("1");
        else if(d3<d1&&d3>d2) printf("0");
        else printf("2");
    }
    }
    else if(x3-x1==0){
        if(x1<y1){
            if(n1<x1) printf("1");
            else if(n1>y1) printf("2");
            else printf("0");
        }
        else if(x1>y1)
        {
            if(n1>x1) printf("1");
            else if(n1<y1) printf("2");
            else printf("0");
        }
    }
    return 0;
}

** F**.https://ac.nowcoder.com/acm/contest/43597/F

思路:就是逻辑上的判断,具体看代码注释吧。情况比较繁琐。

代码:

using namespace std;
int a[10];
int b[10];
int main()
{
    int n;
    scanf("%d",&n);
    int aa=0,bb=0;
    bool j=true;
    for(int i=1;i<=n;i++)
    {
        scanf("%d %d",&a[i],&b[i]);
        //分数均低于21,无赢家,违规比分
        if(a[i]<21&&b[i]<21) j=false;
        //比分均大于30时,违规比分
        if(a[i]>30||b[i]>30) j=false;
        //比分相等无赢家,违规比分
        if(a[i]==b[i]) j=false;
        //比分为21:20或20:21时,违规比分
        if(a[i]==21&&b[i]==20) j=false;
        if(b[i]==21&&a[i]==20) j=false;
        //分数高者22~29 但赢分不是2,违规比分
        if(a[i]>21&&a[i]>b[i]&&a[i]-b[i]!=2&&a[i]!=30) j=false;
        if(b[i]>21&&b[i]>a[i]&&b[i]-a[i]!=2&&b[i]!=30) j=false;
        //分数高者30,但输家不是28或29,违规比分
        if(a[i]==30&&(a[i]-b[i]>2)) j=false;
        if(b[i]==30&&(b[i]-a[i]>2)) j=false;
        
        //已经赢了两局但是仍在比赛,违规
        if(abs(aa-bb)==2) j=false;
        
        //比分合规,比赛合规,记录对局得分情况
        if(j){
        	if(a[i]>b[i]) aa++;
        	else bb++;
        }
    }
    if(!j) printf("0");//数据不合规,输出零
    else if(aa==1&&bb==1) printf("0");//1:1,无赢家,输出零
    else printf("%d",aa>bb?1:2);
    return 0;
}

写在最后,去年的萌新蒟蒻,今年的老蒟蒻,希望hanhan学姐的题解可以坚持到新生赛结束QWQ

全部评论

相关推荐

1 2 评论
分享
牛客网
牛客企业服务