本文主要是介绍D. Divisible Pairs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:我们预处理出每个数分别摸上xy的值,用map存一下,然后遍历每个数,如果a + b是x的倍数的话,那么他们模x的值相加为x,如果a - b是y的倍数的话,那么他们的模y的值相等。
代码:
void solve(){int n, x, y;cin >> n >> x >> y;vector<int>a(n);for(int i = 0;i < n;i ++)cin >> a[i];map<pair<int,int>,int>mp;for(int i = 0;i < n; i++){int lx = a[i] % x;int ly = a[i] % y;mp[{lx,ly}] ++;}int ans = 0;for(int i = 0;i < n; i++){int lx = a[i] % x;int ly = a[i] % y;int cnt = mp[{(x - lx) % x, ly}];if((x - lx) % x == lx){if(cnt)ans += cnt - 1;}else{if(cnt)ans += cnt;}}ans /= 2;cout << ans << endl;
}
这篇关于D. Divisible Pairs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!