题解: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

本篇题解结束