Ringo喜欢的数字2
解题思路
这是一个统计数组中满足特定条件的元素对数量的问题。具体来说,题目要求统计数组中有多少对元素,它们的差能被200整除。
关键点
- 
数学原理:根据模运算的性质,如果两个数a和b满足a ≡ b (mod 200),那么它们的差(a - b)就能被200整除。 
- 
统计方法:我们不需要直接计算所有可能的元素对,而是可以通过统计每个数对200取模的结果,然后计算相同余数的数的组合数。 
- 
组合计算:对于每个余数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;
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号