This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int N, M, S, E, T, M_;
int C[3001][6001], F[3001];
int D[3001][6001];
int A[3001][6001];
int B[3001][6001];
typedef pair<int, int> pii;
deque<pii> que[3001];
int readint(){
bool minus = false;
int result = 0;
char ch;
ch = getchar();
while (true) {
if (ch == '-') break;
if (ch >= '0' && ch <= '9') break;
ch = getchar();
}
if (ch == '-') minus = true; else result = ch-'0';
while (true) {
ch = getchar();
if (ch < '0' || ch > '9') break;
result = result*10 + (ch - '0');
}
if (minus)
return -result;
else
return result;
}
void init(){
N = readint(), M_ = readint(), S = readint(), E = readint(), T = readint();
M = M_+S-1;
for (int i=1; i<=N; i++)
for (int j=1; j<=M_; j++) C[i][j] = readint();
for (int i=1; i<=N; i++){
for (int j=1; j<=M; j++){
D[i][j] = INF;
A[i][j] = A[i][j-1] + C[i][j];
}
}
for (int i=1; i<=N; i++) F[i] = readint();
}
void solve(){
for (int j=1; j<=M; j++){
pii min3[3] = {pii(INF, -1), pii(INF, -1), pii(INF, -1)};
for (int i=1; i<=N; i++){
while (que[i].size() && que[i].front().second < j-E)
que[i].pop_front();
if (j - S >= S){
pii tmp = pii(B[i][j-S], j-S);
while (que[i].size() && que[i].back() >= tmp)
que[i].pop_back();
que[i].push_back(tmp);
}
if (que[i].size()) D[i][j] = min(D[i][j], que[i].front().first + A[i][j] + T);
if (j <= E) D[i][j] = min(D[i][j], A[i][j]);
pii tmp = pii(D[i][j], i);
if (min3[0] >= tmp){
min3[2] = min3[1], min3[1] = min3[0], min3[0] = tmp;
}
else if (min3[1] >= tmp){
min3[2] = min3[1], min3[1] = tmp;
}
else if (min3[2] >= tmp){
min3[2] = tmp;
}
}
//update B
for (int i=1; i<=N; i++){
for (int k=0; k<3; k++){
if (min3[k].second != i && min3[k].second != F[i]){
B[i][j] = min3[k].first - A[i][j];
break;
}
}
}
}
int ans = INF;
for (int i=1; i<=N; i++)
for (int j=M_; j<=M; j++)
ans = min(ans, D[i][j]);
printf("%d\n", ans);
}
int main(){
init();
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |