Codes Round 925 (Div. 3) D. Divisible Pairs (Java)
比赛链接:Codeforces Round 925 (Div. 3)
D题传送门:D.Divisible Pairs
题目:D.Divisible Pairs
题目描述
输出格式
For each test case, output a single integer — the number of beautiful pairs in the array $ a $ .
样例 #1
样例输入 #1
7
6 5 2
1 2 7 4 9 6
7 9 5
1 10 15 3 8 12 15
9 4 10
14 10 2 2 11 11 13 5 6
9 5 6
10 7 6 7 9 7 7 10 10
9 6 2
4 9 7 1 2 2 13 3 15
9 2 3
14 6 1 15 12 15 8 2 15
10 5 7
13 3 3 2 12 11 3 7 13 14
样例输出 #1
2
0
1
3
5
7
0
分析:
题目要我们求美丽对的数量。
由美丽对的定义可得
- a i + a j a_i + a_j ai+aj % x = 0 x = 0 x=0 等价于 ( a i (a_i % x = 0 (ai% x + a j a_j % x = 0 aj% x)%x = 0
- a i − a j a_i - a_j ai−aj % y = 0 y = 0 y=0 等价于 a i a_i % x ai%y = a j a_j % x = 0 aj% y
我们定义一个HashMap的集合,集合的键 List 用来记录对 ai%x 和 ai%y 的答案,集合的值用来记录对应键出现的次数。
定义一个变量 t 来记录 a i a_i ai
定义 ArrayList< Integer > a 先记录 t%x ,再记录 t%y
定义 ArrayList< Intege r> b 先记录 (x-a.get(0))%x ,再记录 t%y
计算 map 中 b 出现的次数,然后将 a 加入到 map 中
代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int tr = sc.nextInt();
while(tr-->0) {
int n = sc.nextInt();
int x = sc.nextInt();int y = sc.nextInt();
Map<List<Integer>,Long> map = new HashMap<>();
long ans = 0;
for(int i = 0;i < n;i++) {
int t = sc.nextInt();
ArrayList<Integer> a = new ArrayList<>();
ArrayList<Integer> b = new ArrayList<>();
a.add(t%x);a.add(t%y);
b.add((x-a.get(0))%x);b.add(t%y);
if(map.containsKey(b)) {
ans += map.get(b);
}
map.put(a,map.getOrDefault(a, (long) 0)+1);
}
System.out.println(ans);
}
sc.close();
}
}