电子科技大学实验中学PK赛(二)比赛题解

比赛地址:http://qscoj.cn/contest/27/

A题 FIFA强化

分析:这个题目要求说的比较明显,用几个if判断一下就好了。不要一判断完就输出,最好用一个ans储存下答案。输出答案时,注意为0时输出0,不为0时得先输出“+”再输出该等级。

标程:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c,k;
    cin>>a>>b>>k;
    if (a*b==0) c=a+b;
    else c=max(a,b)+1;
    if (k==-1) c=0;
    if (c) cout<<"+"<<c<<endl;
    else cout<<0<<endl;
    return 0;
}

B题 新鸡兔同笼

分析:鸡有a只脚,兔子有b只脚;鸡和兔的头的和为x,鸡和兔的脚之和为y。因此,我们可以列个方程,设转基因鸡的数量为c,转基因兔的数量为r,c+r=x;c*a+r*b=y;可以解得r=(y-a*x)/(b-a),c=x-r;但这样计算的话r,c可能本身不是整数,在除法取整运算中会产生误差,所以得带进去检验是否正确,另外r,c得是非负整数。两步检验后如果确认是合理解就输出,否则输出-1.

标程:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long a,b,x,y,c,r;
    bool flag;
    cin>>a>>b>>x>>y;flag=true;
    r=(y-a*x)/(b-a);c=x-r;
    if (r<0 || c<0) flag=false;
    else if (a*c+b*r!=y) flag=false;
    if (flag) cout<<c<<" "<<r<<endl;
    else cout<<-1<<endl;
    return 0;
}

C题 成绩排序

分析:N最大为10000000,直接用结构体存会爆内存。我们通过观察发现,a,b,c的大小都只有100,所以只有101*101*101种可能,于是就可以开一个数组来储存每种情况的数量。然后再从依次按照总分高、语文高、数学高的顺序把这些数给输出来就行。

#include<bits/stdc++.h>
using namespace std;
int s[110][110][110];
int main()
{
    int n,i,j,k,l,r,a,b,c;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        s[a][b][c]++;
    }
    for(i=300;i>=0;i--)
        for(j=100;j>=0;j--)
            for(k=100;k>=0;k--)
            {
                l=i-j-k;
                if (l>=0 && l<=100)
                {
                    for(r=1;r<=s[j][k][l];r++)
                        printf("%d %d %d
",j,k,l);
                }
            }
    return 0;
}
原文地址:https://www.cnblogs.com/cs-lyj1997/p/6868538.html