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

时间:2022-07-03 08:49:49

比赛地址: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==) c=a+b;
else c=max(a,b)+;
if (k==-) c=;
if (c) cout<<"+"<<c<<endl;
else cout<<<<endl;
return ;
}

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< || c<) flag=false;
else if (a*c+b*r!=y) flag=false;
if (flag) cout<<c<<" "<<r<<endl;
else cout<<-<<endl;
return ;
}

C题 成绩排序

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

#include<bits/stdc++.h>
using namespace std;
int s[][][];
int main()
{
int n,i,j,k,l,r,a,b,c;
cin>>n;
for(i=;i<=n;i++)
{
scanf("%d%d%d",&a,&b,&c);
s[a][b][c]++;
}
for(i=;i>=;i--)
for(j=;j>=;j--)
for(k=;k>=;k--)
{
l=i-j-k;
if (l>= && l<=)
{
for(r=;r<=s[j][k][l];r++)
printf("%d %d %d\n",j,k,l);
}
}
return ;
}