1- # include < iostream >
2- # include < vector >
1+ import java.util.*;
2+ import java.io.FileInputStream;
33
4- using namespace std ;
54
6- int calculate (vector<int >&A, vector<int >&B, int N , int M){
7- int diff;
8- int max = -1 ;
9- if (N>M) {
10- diff = N - M;
11-
12- for (int j=0 ; j<=diff ; j++){
13- int sum = 0 ;
5+ class Solution
6+ {
7+ public static void main (String args[]) throws Exception
8+ {
9+
10+ Scanner sc = new Scanner (System.in );
11+ int T;
12+ T=sc.nextInt ();
13+
14+ for (int test_case = 1 ; test_case <= T; test_case++)
15+ {
16+ int N, M;
17+ N = sc.nextInt ();
18+ M = sc.nextInt ();
19+
20+ int arr1[] = new int [N];
21+ int arr2[] = new int [M];
22+
23+ for (int i=0 ; i<N; i++){
24+ arr1[i] = sc.nextInt ();
25+ }
1426 for (int i=0 ; i<M; i++){
15- sum += A[i+j] * B[i] ;
27+ arr2[i] = sc. nextInt () ;
1628 }
17- if (max < sum) max = sum;
18- }
19- }
20- else {
21- diff = M - N;
22- for (int j=0 ; j<=diff ; j++){
23- int sum = 0 ;
24- for (int i=0 ; i<N; i++){
25- sum += A[i] * B[i+j];
29+
30+ int answer=-1 ;
31+
32+
33+ if (N<=M){
34+
35+ for (int start=0 ; start<=M-N; start++){
36+ int sum = 0 ;
37+ for (int i=0 ; i<N; i++){
38+ sum += arr1[i] * arr2[start+i];
39+ }
40+ answer = Math.max (answer, sum);
41+ }
42+
2643 }
27- if (max < sum) max = sum;
28- }
29-
30- }
31-
32- return max;
33-
34- }
35-
36- int main (int argc, char ** argv)
37- {
38- int test_case;
39- int T;
40- /*
41- 아래의 freopen 함수는 input.txt 를 read only 형식으로 연 후,
42- 앞으로 표준 입력(키보드) 대신 input.txt 파일로부터 읽어오겠다는 의미의 코드입니다.
43- //여러분이 작성한 코드를 테스트 할 때, 편의를 위해서 input.txt에 입력을 저장한 후,
44- freopen 함수를 이용하면 이후 cin 을 수행할 때 표준 입력 대신 파일로부터 입력을 받아올 수 있습니다.
45- 따라서 테스트를 수행할 때에는 아래 주석을 지우고 이 함수를 사용하셔도 좋습니다.
46- freopen 함수를 사용하기 위해서는 #include <cstdio>, 혹은 #include <stdio.h> 가 필요합니다.
47- 단, 채점을 위해 코드를 제출하실 때에는 반드시 freopen 함수를 지우거나 주석 처리 하셔야 합니다.
48- */
49- // freopen("input.txt", "r", stdin);
50- cin>>T;
51- /*
52- 여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
53- */
54- for (test_case = 1 ; test_case <= T; ++test_case)
55- {
56-
57- int N, M;
58- cin >> N >> M;
59- vector<int > A (N);
60- vector<int > B (M);
61- for (int i=0 ; i<N; i++){
62- cin >> A[i];
63- }
64- for (int i=0 ;i<M; i++){
65- cin >> B[i];
66- }
67-
68- cout <<" #" << test_case <<" " << calculate (A,B,N,M) << " \n " ;
69-
44+ else {
45+
46+ for (int start=0 ; start<=N-M; start++){
47+ int sum = 0 ;
48+ for (int i=0 ; i<M; i++){
49+ sum += arr1[start+i] * arr2[i];
50+ }
51+ answer = Math.max (answer, sum);
52+ }
53+
54+ }
55+
7056
71- }
72- return 0 ;// 정상종료시 반드시 0을 리턴해야합니다.
57+ System.out .println (" #" + test_case + " " + answer);
58+
59+ }
60+ }
7361}
0 commit comments