結果
問題 | No.31 悪のミックスジュース |
ユーザー |
![]() |
提出日時 | 2022-04-23 15:49:28 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 47 ms / 5,000 ms |
コード長 | 1,326 bytes |
コンパイル時間 | 2,139 ms |
コンパイル使用メモリ | 203,508 KB |
最終ジャッジ日時 | 2025-01-28 21:09:51 |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 17 |
ソースコード
#include <bits/stdc++.h>using namespace std;const long long INF = 1000000000000000000;vector<vector<long long>> matrix_multiplication(vector<vector<long long>> A, vector<vector<long long>> B){int N = A.size();vector<vector<long long>> C(N, vector<long long>(N, INF));for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){for (int k = 0; k < N; k++){C[i][k] = min(C[i][k], A[i][j] + B[j][k]);}}}return C;}vector<vector<long long>> matrix_exponentiation(vector<vector<long long>> A, int M){int N = A.size();vector<vector<long long>> ans(N, vector<long long>(N, INF));for (int i = 0; i < N; i++){ans[i][i] = 0;}while (M > 0){if (M % 2 == 1){ans = matrix_multiplication(ans, A);}A = matrix_multiplication(A, A);M /= 2;}return ans;}int main(){int N, V;cin >> N >> V;vector<int> C(N);for (int i = 0; i < N; i++){cin >> C[i];}vector<long long> S(N + 1);S[0] = 0;for (int i = 0; i < N; i++){S[i + 1] = S[i] + C[i];}V = max(V, N) - N;vector<vector<long long>> M(N, vector<long long>(N, INF));for (int i = 0; i < N - 1; i++){M[i][i + 1] = 0;}for (int i = 0; i < N; i++){M[i][0] = S[i + 1];}M = matrix_exponentiation(M, V);cout << M[0][0] + S[N] << endl;}