Codeforces Round 925 (Div. 3) D. Divisible Pairs (Java)

Codeforces Round 925 (Div. 3) D. Divisible Pairs (Java)

比赛链接:Codeforces Round 925 (Div. 3)

D题传送门:D.Divisible Pairs

题目:D.Divisible Pairs

题目描述

Codeforces Round 925 (Div. 3) D. Divisible Pairs (Java)_第1张图片

输出格式

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 aiaj % 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();
    }
}

你可能感兴趣的:(算法题,java,开发语言,算法,eclipse,idea)