题解:P5728 【深基5.例5】旗鼓相当的对手

· · 题解

棋逢对手,将遇良才。

更好的阅读体验。

题意

现在给出每组有 3 个数的长度为 n 的序列,要求出其中有几对每个数的差不超过 5 且总差不超过 10 的组。

思路

这就是一道纯模拟题,我们可以设立 4 个数组,分别表示语文、数学、英语和总分。

对这 4 个依次进行判断,直接加到答案里面。

时间复杂度为 O(n^2)

在本题的数据范围内(2\le n\le1000),这种时间复杂度是完全可行的。

代码

#include <bits/stdc++.h>
using namespace std;
int yw[1005],sx[1005],yy[1005],zf[1005];//拼音万岁!
int ans=0;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>yw[i]>>sx[i]>>yy[i];
        zf[i]=yw[i]+sx[i]+yy[i]; 
    }
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if((abs(yw[i]-yw[j])<=5)&&(abs(sx[i]-sx[j])<=5)&&(abs(yy[i]-yy[j])<=5)&&(abs(zf[i]-zf[j])<=10)){//就是题目里面的意思。
                ans++;
            }
        }
    }
    cout<<ans;
    return 0;
}