Codeforces 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 = 0 && a j a_j % x = 0 aj% 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 = y
我们定义一个HashMap的集合,集合的键 List 用来存储 ai%x 和 ai%y 的值,集合的值用来存储键出现对应的次数。
定义一个变量 t 来存储 a i a_i ai
定义 ArrayList a 先存储 t%x 再 存储 t%y
定义 ArrayList 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();}
}