Submission #1000815

#TimeUsernameProblemLanguageResultExecution timeMemory
1000815UnforgettableplHarvest (JOI20_harvest)C++17
5 / 100
5040 ms174204 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,m,l,c; cin >> n >> m >> l >> c; vector<int> employee(n+1); vector<int> apple(m); vector<pair<int,int>> adj(n+1); for(int i=1;i<=n;i++)cin>>employee[i]; for(int&i:apple)cin>>i; for(int i=1;i<=n;i++){ set<pair<int,int>> dists; for(int j=1;j<=n;j++){ dists.insert({(l+employee[i]-employee[j])%l,j}); } int modded = c%l; auto iter = dists.lower_bound({modded,0ll}); if(iter==dists.end()){ adj[i] = {i,(c/l)*l + l}; continue; } adj[i] = {iter->second,(c/l)*l + iter->first}; } vector<vector<pair<int,int>>> eqn(n+1); for(int&i:apple){ int start = -1; if(i<employee[1])start = n; else { start = upper_bound(employee.begin()+1,employee.end(),i)-employee.begin()-1; } vector<pair<int,int>> curr(n+1,{INF,INF}); function<void (int,int)> dfs = [&](int x,int tim){ if(curr[x].second!=INF)return; if(curr[x].first!=INF)curr[x].second=tim-curr[x].first; else curr[x].first = tim; dfs(adj[x].first,tim+adj[x].second); }; dfs(start,(l+i-employee[start])%l); for(int i=1;i<=n;i++)eqn[i].emplace_back(curr[i]); } int q; cin >> q; for(int i=1;i<=q;i++){ int v,t; cin >> v >> t; int ans = 0; for(auto[a,b]:eqn[v]){ if(t<a)continue; ans+=(t-a)/b + 1; } cout << ans << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...