专栏文章
题解:P5741 【深基7.例10】旗鼓相当的对手 - 加强版
P5741题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miox4l5i
- 此快照首次捕获于
- 2025/12/03 02:35 3 个月前
- 此快照最后确认于
- 2025/12/03 02:35 3 个月前
P5741 【深基7.例10】旗鼓相当的对手 - 加强版
题目传送门
分析题目,我们有两种选择,一种结构体,一种数组,显然结构体更简单易懂。所以我们先定义一个存放名字和语数英三科成绩的结构体。
CPPstruct stu{
string e; //姓名
int a; //语文
int b; //数学
int c; //英语
}q[1005];
接着看题,如果两对同学的每一科分差都不大于 分,且总分差不大于 分,就是“旗鼓相当的对手”。所以我们先按字典序排序,再用双层循环来判断。
但我们并不用担心负数的情况,因为有 这个好东西。
可以取绝对值。
CPPfor(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(q[i].e>q[j].e){ //如果字典序小就在前面
swap(q[i].e,q[j].e);
swap(q[i].a,q[j].a);
swap(q[i].b,q[j].b);
swap(q[i].c,q[j].c);
}
}
}
if(abs(q[i].a-q[j].a)<=5&&abs(q[i].b-q[j].b)<=5&&abs(q[i].c-q[j].c)<=5&&abs(q[i].a+q[i].b+q[i].c-(q[j].a+q[j].b+q[j].c))<=10) //判断是否为旗鼓相当的对手
cout<<q[i].e<<" "<<q[j].e<<endl; //如果是就输出
最后贴完整代码:
CPP#include<bits/stdc++.h>
using namespace std;
int s;
struct stu{
string e;
int a;
int b;
int c;
}q[1005];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>q[i].e>>q[i].a>>q[i].b>>q[i].c;
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(q[i].e>q[j].e){
swap(q[i].e,q[j].e);
swap(q[i].a,q[j].a);
swap(q[i].b,q[j].b);
swap(q[i].c,q[j].c);
}
}
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(abs(q[i].a-q[j].a)<=5&&abs(q[i].b-q[j].b)<=5&&abs(q[i].c-q[j].c)<=5&&abs(q[i].a+q[i].b+q[i].c-(q[j].a+q[j].b+q[j].c))<=10)
cout<<q[i].e<<" "<<q[j].e<<endl;
}
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...