Submission #1048987

#TimeUsernameProblemLanguageResultExecution timeMemory
1048987ArturgoTrains (BOI24_trains)C++14
100 / 100
126 ms110112 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int MOD = 1e9 + 7; struct Ville { int raison, nbStops; }; vector<vector<vector<int>>> cumulatifs; signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); for(int raison = 0;raison <= 100;raison++) { cumulatifs.push_back(vector<vector<int>>( raison, {0} )); } int nbVilles; cin >> nbVilles; vector<Ville> villes(nbVilles); for(Ville& ville : villes) { cin >> ville.raison >> ville.nbStops; } reverse(villes.begin(), villes.end()); vector<int> reponses; for(int iVille = 0;iVille < nbVilles;iVille++) { int nbChemins = 1; Ville& v = villes[iVille]; if(v.raison > 100) { for(int stop = 1;stop <= v.nbStops;stop++) { int pos = iVille - stop * v.raison; if(pos < 0) break; nbChemins += reponses[pos]; } } else if(v.raison != 0) { int nbIn = min(v.nbStops, iVille / v.raison); if(nbIn > 0) { vector<int>& cumul = cumulatifs[v.raison][iVille % v.raison]; nbChemins += cumul.back() - cumul[(int)cumul.size() - nbIn - 1]; } } nbChemins %= MOD; nbChemins += MOD; nbChemins %= MOD; reponses.push_back(nbChemins); for(int raison = 1;raison <= 100;raison++) { cumulatifs[raison][iVille % raison].push_back( cumulatifs[raison][iVille % raison].back() + nbChemins ); } } cout << reponses.back() << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...