题解:P5728 【深基5.例5】旗鼓相当的对手
蒟蒻的第二篇题解
禁止直接复制粘贴题解
先看题目
现有
N 名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过150 的自然数)。如果某对学生⟨i,j⟩ 的每一科成绩的分差都不大于5 且总分分差不大于10 那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。关键就在于“每一科成绩的分差都不大于
5 ,且总分分差不大于10 ”这一行以及最后一行“同样一个人可能会和其他好几名同学结对。”所以要有两层循环
利用if语句判断结合暴力枚举判断即可,数据很小,不用开long long,也不会超时
下面放代码,注释里都写明白了,不懂的可以私信我
//by.ccw_china
#include<bits/stdc++.h>
using namespace std;
int a[1005],b[1005],c[1005],d[1005]; //abc分别存储语数英成绩,d用来存储总分
int main()
{
int n,h=0; //h用来计数
cin>>n; //数据读入
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i]>>c[i];
d[i]=a[i]+b[i]+c[i];
}
for(int i=1;i<=n;i++) //暴力枚举
{
for(int j=i+1;j<=n;j++)
{
if(abs(a[i]-a[j])<=5 and abs(b[i]-b[j])<=5 and abs(c[i]-c[j])<=5 and abs(d[i]-d[j])<=10)//判断,如果成立计数器就加1,注意一个小坑,减出来可能是负的,但如果绝对值小于等于5也是可以的
{
h++;
}
}
}
cout<<h;//输出
return 0;
}
评测AC链接:https://www.luogu.com.cn/record/219183197
本篇题解结束