Submission #26931

#TimeUsernameProblemLanguageResultExecution timeMemory
26931kajebiiiSemiexpress (JOI17_semiexpress)C++14
100 / 100
0 ms2204 KiB
#include <stdio.h> #include <bits/stdc++.h> using namespace std; #define SZ(v) ((int)(v).size()) #define ALL(v) (v).begin(),(v).end() #define one first #define two second typedef long long ll; typedef pair<int, int> pi; typedef pair<ll, int> pli; typedef tuple<int, int, int> ti; const int INF = 0x3f2f1f0f; const ll LINF = 1ll * INF * INF; const int MAX_N = 3e3 + 10; ll L, B, C, A, T; int N, P, Nr[MAX_N]; struct DT { ll t; int ix, r, p; DT() {} DT(ll tt, int i, int rr) : t(tt), ix(i), r(rr), p(min(1ll*r, t/C + 1)) {} DT next() { int nextE = Nr[lower_bound(Nr, Nr+N, ix+1) - Nr]; if(nextE <= ix + p) DT(-1, -1, -1); ll nt = t - p * B; return DT(nt, ix + p, nextE - (ix+p)); } bool operator<(const DT &o) const {return p < o.p;} }; ll ans = 0; priority_queue<DT> Q; void add(ll t, int ix) { if(t >= 0) ans++; if(t < B) return; if(ix == L) return; int nextE = Nr[lower_bound(Nr, Nr+N, ix+1) - Nr]; int r = min(1ll*nextE - 1, ix + (t / C)); ans += (r - ix); // printf("%lld\n", ans); t -= (r+1 - ix) * B; ix = r+1; Q.push(DT(t, ix, nextE - ix)); } int main() { cin >> L >> N >> P; P -= N; cin >> C >> A >> B >> T; for(int i=0; i<N; i++) scanf("%d", &Nr[i]); for(int i=0; i<N; i++) add(T - A * (Nr[i] - 1), Nr[i]); while(!Q.empty() && P-- > 0) { DT temp = Q.top(); Q.pop(); if(temp.t < 0 || temp.p <= 0) continue; // printf("%lld %d %d %d\n", temp.t, temp.ix, temp.r, temp.p); ans += temp.p; temp = temp.next(); if(temp.ix == -1) continue; Q.push(temp); } printf("%lld\n", ans-1); return 0; }

Compilation message (stderr)

semiexpress.cpp: In function 'int main()':
semiexpress.cpp:49:44: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=0; i<N; i++) scanf("%d", &Nr[i]);
                                            ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...