CCF-CSP-202006-2-희소 벡터

9774 단어 CCF
내적 의미는 두 벡터의 각 차원을 곱하는 합을 가리킨다.두 차원 모두 0이 아니므로 곱해야 의미가 있다.그래서 두 벡터가 모두 0이 아닌 차원을 곱해서 더하면 된다.첫 번째 벡터 u의 키 값은 맵에 저장되고, 두 번째 벡터의 키 값은 맵에서 존재하는 idx를 찾아 곱하고 덧붙인다.
다음 코드는 모두 60분, 시간 초과입니다.나는 데이터만 읽는 코드로 바꿨는데 제출한 후에도 2초가 넘게 걸렸으니 어쩐지 시간이 초과되었더라니.
java 코드
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int a = sc.nextInt();
        int b = sc.nextInt();
        int ans = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < a; i++) {
            int idx = sc.nextInt();
            int val = sc.nextInt();
            map.put(idx, val);
        }
        for (int i = 0; i < b; i++) {
            int idx = sc.nextInt();
            int val = sc.nextInt();
            if (map.containsKey(idx))
                ans += map.get(idx) * val;
        }
        System.out.println(ans);
    }
}


python 코드
n, a, b = map(int, input().split())
d, ans = {}, 0
for i in range(a):
    idx, val = map(int, input().split())
    d[idx] = val
for i in range(b):
    idx, val = map(int, input().split())
    if idx in d:
        ans += d[idx] * val
print(ans)

# 10 3 4
# 4 5
# 7 -3
# 10 1
# 1 10
# 4 20
# 5 30
# 7 40

좋은 웹페이지 즐겨찾기