Ringo喜欢的数字2

解题思路

这是一个统计数组中满足特定条件的元素对数量的问题。具体来说,题目要求统计数组中有多少对元素,它们的差能被200整除。

关键点

  1. 数学原理:根据模运算的性质,如果两个数a和b满足a ≡ b (mod 200),那么它们的差(a - b)就能被200整除。

  2. 统计方法:我们不需要直接计算所有可能的元素对,而是可以通过统计每个数对200取模的结果,然后计算相同余数的数的组合数。

  3. 组合计算:对于每个余数r,如果有k个数的余数是r,那么这些数可以形成C(k,2) = k*(k-1)/2对满足条件的数对。

#include<bits/stdc++.h>
using namespace std;

int vis[205];           // 定义大小为205的数组vis,用于统计模200的余数出现次数

int main() {
    int n;
    cin >> n;           // 输入整数n,表示数组中元素的数量

    int cnt = 0;        // 初始化计数器cnt为0,用于统计满足条件的元素对数量
    for (int i = 1; i <= n; i++) {  // 循环读取n个元素
        int x;
        cin >> x;        // 输入当前元素x
        
        // 将x对200取模,vis数组统计该余数之前出现的次数
        // 每次新增一个数x,它能与之前所有同余的数形成新的满足条件的对
        cnt += vis[x % 200];  // 将之前同余数的数量加到cnt上
        vis[x % 200]++;       // 更新该余数的出现次数
    }
    cout << cnt;         // 输出满足条件的元素对总数

    return 0;
}

 

posted @ 2025-05-02 18:48  行胜于言Ibl  阅读(15)  评论(0)    收藏  举报