結果
| 問題 | No.3435 [Cherry 8th Tune *] 何回 LOVE SONG を書き換えただろうか? |
| コンテスト | |
| ユーザー |
Moss_Local
|
| 提出日時 | 2026-01-31 18:12:33 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 536 ms / 3,000 ms |
| コード長 | 1,883 bytes |
| 記録 | |
| コンパイル時間 | 1,787 ms |
| コンパイル使用メモリ | 186,980 KB |
| 実行使用メモリ | 13,968 KB |
| 最終ジャッジ日時 | 2026-01-31 18:12:59 |
| 合計ジャッジ時間 | 24,197 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 48 |
ソースコード
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string A;
cin >> A;
int sizeA = A.length();
// 文字からインデックスへのマッピング
map<char, int> char_to_idx;
for (int i = 0; i < sizeA; ++i) {
char_to_idx[A[i]] = i;
}
// 距離行列の読み込み
vector<vector<long long>> d(sizeA, vector<long long>(sizeA));
for (int i = 0; i < sizeA; ++i) {
for (int j = 0; j < sizeA; ++j) {
cin >> d[i][j];
}
}
int N, M;
cin >> N >> M;
vector<string> S(N);
for (int i = 0; i < N; ++i) {
cin >> S[i];
}
// 各位置 k において、各文字 c が何回出現するかをカウント
// count[k][c_idx]
vector<vector<int>> counts(M, vector<int>(sizeA, 0));
for (int i = 0; i < N; ++i) {
for (int k = 0; k < M; ++k) {
counts[k][char_to_idx[S[i][k]]]++;
}
}
// 各位置 k において、ある文字 alpha を選んだ時の距離の総和を前計算
// precalc_cost[k][alpha_idx]
vector<vector<long long>> precalc_cost(M, vector<long long>(sizeA, 0));
for (int k = 0; k < M; ++k) {
for (int a_idx = 0; a_idx < sizeA; ++a_idx) {
long long sum_dist = 0;
for (int c_idx = 0; c_idx < sizeA; ++c_idx) {
sum_dist += d[a_idx][c_idx] * counts[k][c_idx];
}
precalc_cost[k][a_idx] = sum_dist;
}
}
// 各文字列 Si について、全位置のコストを合計して出力
for (int i = 0; i < N; ++i) {
long long total_Hi = 0;
for (int k = 0; k < M; ++k) {
total_Hi += precalc_cost[k][char_to_idx[S[i][k]]];
}
cout << total_Hi << "\n";
}
return 0;
}
Moss_Local