Submission #885137

#TimeUsernameProblemLanguageResultExecution timeMemory
885137MatjazSalesman (IOI09_salesman)C++14
14 / 100
3080 ms16560 KiB
// // SalesmanIOI2009multiple.cpp // // // Created by Matjaz Leonardis on 09/12/2023. // #include <iostream> #include <vector> #include <algorithm> using namespace std; vector<int> L; vector<int> T; vector<int> M; int N,D,U,S; long long distance(int L1, int L2){ if (L1 > L2) return D * (L1 - L2); return U * (L2 - L1); } int main(){ cin >> N >> D >> U >> S; vector<pair<int, pair<int,int> > > tmp(N+2); for (int i=0;i<N;i++){ cin >> tmp[i].first >> tmp[i].second.first >> tmp[i].second.second; } tmp[N] = make_pair(-1, make_pair(S, 0)); tmp[N+1] = make_pair(500001, make_pair(S, 0)); sort(tmp.begin(), tmp.end()); T.assign(N+2, 0); L.assign(N+2, 0); M.assign(N+2, 0); for (int i=0;i<N+2;i++){ L[i] = tmp[i].second.first; M[i] = tmp[i].second.second; T[i] = tmp[i].first; } vector<long long> best(N+2, 0); for (int i=N+1;i>=0;i--){ long long best_remaining; if (i == N + 1) best_remaining = 0; else best_remaining = -distance(L[i], S); if (T[i] != T[i+1] && i != N){ vector<int> V; vector<int> Ls; vector<int> Ms; int index = i + 1; while (T[i+1] == T[index]){ V.push_back(best[index]); Ls.push_back(L[index]); Ms.push_back(M[index]); index++; } for (int j=0;j<V.size();j++){ int accumulation = M[j]; for (int k=j-1;k>=0;k--){ best[j + i + 1] = max(best[j + i +1], V[k] + accumulation - distance(L[j], L[k])); accumulation += M[k]; } accumulation = M[j]; for (int k= j+1;k<V.size();k++){ best[j + i + 1] = max(best[j + i +1], V[k] + accumulation - distance(L[j], L[k])); accumulation += M[k]; } } } for (int j=i+1;j<N+1;j++){ if (T[j] == T[i]) continue; best_remaining = max(best_remaining, -distance(L[i],L[j]) + best[j]); } best[i] = M[i] + best_remaining; } cout << best[0] << endl; return 0; }

Compilation message (stderr)

salesman.cpp: In function 'int main()':
salesman.cpp:66:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |             for (int j=0;j<V.size();j++){
      |                          ~^~~~~~~~~
salesman.cpp:78:34: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |                 for (int k= j+1;k<V.size();k++){
      |                                 ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...