Pagini recente » Cod sursa (job #554592) | Cod sursa (job #1264859) | Cod sursa (job #1331037) | Cod sursa (job #3037558) | Cod sursa (job #2124783)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("magazin.in"); ofstream fout("magazin.out");
const int nmax = 3e4;
const int inf = 1 << 29;
int d[ 2 ][ 6 ];
int c[nmax + 1][ 3 ];
vector< int > ob[nmax + 1];
inline int min4 (int a, int b, int x, int y) {
return min(min(a, b), min(x, y));
}
inline int min5 (int a, int b, int x, int y, int t) {
return min(min4(a, b, x, y), t);
}
int main() {
int p, n, m, D;
fin >> p >> n >> m >> D;
for (int i = 0; i < p; ++ i) {
int x, y;
fin >> x >> y;
ob[ x ].push_back( y );
c[ x ][ 0 ] = max(c[ x ][ 0 ], 2 * y);
c[ x ][ 1 ] = max(c[ x ][ 1 ], 2 * (m + 1 - y));
}
for (int i = 1; i <= n; ++ i) {
c[ i ][ 2 ] = inf;
ob[ i ].push_back( 0 );
ob[ i ].push_back(m + 1);
sort(ob[ i ].begin(), ob[ i ].end());
for (int j = 1; j < (int)ob[ i ].size(); ++ j) {
c[ i ][ 2 ] = min(c[ i ][ 2 ], 2 * (m + 1 - ob[ i ][ j ] + ob[ i ][j - 1]));
}
}
for (int i = 0; i < 6; ++ i) {
d[ 0 ][ i ] = inf;
}
d[ 0 ][ 0 ] = 0;
int ind = 1;
for (int i = 1; i <= n; ++ i, ind = 1 - ind) {
d[ ind ][ 0 ] = min5(d[ !ind ][ 0 ] + c[ i ][ 0 ],
d[ !ind ][ 1 ] + m + 1,
d[ !ind ][ 2 ] + 2 * (m + 1),
d[ !ind ][ 3 ] + m + 1,
d[ !ind ][ 4 ] + c[ i ][ 2 ]) + D;
d[ ind ][ 1 ] = min5(d[ !ind ][ 0 ] + m + 1,
d[ !ind ][ 1 ] + c[ i ][ 1 ],
d[ !ind ][ 2 ] + m + 1,
d[ !ind ][ 3 ] + 2 * (m + 1),
d[ !ind ][ 5 ] + c[ i ][ 2 ]) + D;
d[ ind ][ 2 ] = min(d[ !ind ][ 0 ] + c[ i ][ 2 ],
d[ !ind ][ 2 ] + c[ i ][ 2 ]) + 3 * D;
d[ ind ][ 3 ] = min(d[ !ind ][ 1 ] + c[ i ][ 2 ],
d[ !ind ][ 3 ] + c[ i ][ 2 ]) + 3 * D;
d[ ind ][ 4 ] = min4(d[ !ind ][ 1 ] + m + 1,
d[ !ind ][ 2 ] + 2 * (m + 1),
d[ !ind ][ 3 ] + m + 1,
d[ !ind ][ 4 ] + c[ i ][ 2 ]) + 3 * D;
d[ ind ][ 5 ] = min4(d[ !ind ][ 0 ] + m + 1,
d[ !ind ][ 2 ] + m + 1,
d[ !ind ][ 3 ] + 2 * (m + 1),
d[ !ind ][ 5 ] + c[ i ][ 2 ]) + 3 * D;
}
ind = 1 - ind;
fout << d[ ind ][ 0 ] - D << "\n";
return 0;
}