| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1297010 | m_a_d | Peru (RMI20_peru) | C++20 | 174 ms | 327680 KiB |
#include <bits/stdc++.h>
#include "peru.h"
using namespace std;
//#define int long long
#define INT64_MAX INT32_MAX
const int MOD=1e9+7;
//Hatayı bul (bir ara)
int mod_expo(int a, int e) {
if(e==0) return 1;
if(e==1) return a;
int val=mod_expo(a/2, e);
int extra;
a%2==1 ? extra=a : extra=1;
return (((val*val) % MOD)*extra) % MOD;
}
int32_t solve(int32_t n, int32_t k, int32_t* arr) {
/*int n, k;
cin >> n >> k;*/
int exponents[n];
exponents[0]=1;
for(int i=1; i<n; ++i) exponents[i]=(exponents[i-1]*23) % MOD;
/*int arr[n];
for(int i=0; i<n; ++i) cin >> arr[i];*/
vector<vector<int>> dp(n, vector<int>(k, INT64_MAX));
dp[0][0]=arr[0];
for(int j=1; j<k; ++j) {
dp[0][j]=max(dp[0][j-1], arr[j]);
}
for(int i=1; i<n; ++i) {
int st_val=INT64_MAX;
for(int j=0; j<k; ++j) {
if(i-1-j<0) break;
st_val=min(st_val, dp[i-1-j][j]);
}
int add=arr[i];
for(int j=0; j<k; ++j) {
if(i+j>=n) break;
add=max(add, arr[i+j]);
dp[i][j]=st_val+add;
}
}
/*for(int i=0; i<n; ++i) {
for(int j=0; j<k; ++j) {
cout << dp[i][j] << " ";
}
cout << endl;
}*/
int ans[n];
fill(ans, ans+n, INT64_MAX);
int mod_ans=0;
for(int i=0; i<n; ++i) {
for(int j=0; j<k; ++j) {
if(i-j<0) break;
ans[i]=min(ans[i], dp[i-j][j]);
}
}
for(int i=0; i<n; ++i) {
mod_ans+=(ans[i]*exponents[n-i-1])%MOD;
while(mod_ans>=MOD) mod_ans-=MOD;
}
return mod_ans;
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
