电子科技大学实验中学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\n",j,k,l); } } return 0; }