题解:洛谷P5728 旗鼓相当的对手


蒟蒻的第二篇题解
禁止直接复制粘贴题解
先看题目
现有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; }

洛谷发布日期为2025-06-01 17:15

原文链接 返回主页