题解:洛谷P5728 旗鼓相当的对手
蒟蒻的第二篇题解
禁止直接复制粘贴题解
先看题目
现有N名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过150的自然数)。如果某对学生⟨i,j⟩的每一科成绩的分差都不大于5且总分分差不大于10那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。
关键就在于“每一科成绩的分差都不大于5,且总分分差不大于10”这一行以及最后一行“同样一个人可能会和其他好几名同学结对。”所以要有两层循环
利用if语句判断结合暴力枚举判断即可,数据很小,不用开long long,也不会超时
下面放代码,注释里都写明白了,不懂的可以私信我
//by.ccw_china
#include
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<
洛谷发布日期为2025-06-01 17:15
原文链接
返回主页