以下の内容はhttps://drken1215.hatenablog.com/entry/2024/09/21/022145より取得しました。


JOI 一次予選 2025 第 1 回 D - どら焼き (7Q, 難易度 2)

多重 for 文の練習!

問題概要

2 つの数列  A_{1}, A_{2}, \dots, A_{N} B_{1}, B_{2}, \dots, B_{M} が与えられる。数列  A, B からそれぞれ 1 個ずつ選んでできる  NM 個のペアについて

「その和」と「その最大値」の積

を求めて、それらの総和を求めよ。

制約

  •  1 \le N, M \le 100

考えたこと

2 つの数列からそれぞれ要素をとってできる組を走査するのは、次のような 2 重の for 文で書ける。

for (int i = 0; i < N; i++) {
  for (int j = 0; j < M; j++) {
     // 組 (A[i], B[j]) に関する処理をする

  }
}

ここでは、(A[i] + B[j]) * max(A[i], B[j]) についての総和を求めれば良い。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> A(N), B(M);
    for (int i = 0; i < N; i++) cin >> A[i];
    for (int i = 0; i < M; i++) cin >> B[i];

    int res = 0;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            res += (A[i] + B[j]) * max(A[i], B[j]);
        }
    }
    cout << res << endl;
}



以上の内容はhttps://drken1215.hatenablog.com/entry/2024/09/21/022145より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14