Submission #1190067

#TimeUsernameProblemLanguageResultExecution timeMemory
11900678pete8Long Distance Coach (JOI17_coach)C++20
100 / 100
133 ms23872 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define vi vector<int> #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") #define sz(x) (int)((x).size()) #define int long long using namespace std; const int mod=1e9+7,mxn=3e5,inf=1e18,minf=-1e18,lg=30,Mxn=1e9; //#undef int int n,k,m,d,q,X,W,T; void setIO(string name){ ios_base::sync_with_stdio(0); cin.tie(0); freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout); } int S[mxn+10],D[mxn+10],C[mxn+10]; int dp[mxn+10],pref[mxn+10],mode=1; //min convex hull struct line{ int m,c; mutable int p; bool operator<(line x)const{ if(mode)return m>x.m; return p<x.p; }; int get(int x)const{return (m*x)+c;} }; struct cht{ multiset<line>v; int div(int a,int b){return (a/b)-!(a%b||(a*b>=0));} int intersect(multiset<line>::iterator a,multiset<line>::iterator b){ return div(a->c-b->c,b->m-a->m); } bool bad(multiset<line>::iterator a,multiset<line>::iterator b){ if(b==v.end())return a->p=inf,0; if(a->m==b->m)a->p=((a->c<=b->c)?inf:minf); else a->p=intersect(a,b); return a->p>=b->p; } void add(line a){ auto it=v.insert(a); while(bad(it,next(it)))v.erase(next(it)); if(it!=v.begin()&&bad(prev(it),it))bad(prev(it),it=v.erase(it)); if(it!=v.begin())it=prev(it); while(it!=v.begin()&&bad(prev(it),it)){ bad(prev(it),it=v.erase(it)); it=prev(it); } } int qry(int x){ mode=0; auto it=v.lb({0,0,x}); mode=1; return it->get(x); } }t; bool cmp(pii a,pii b){return a.f<b.f;} int32_t main(){ fastio cin>>X>>n>>m>>W>>T; for(int i=1;i<=n;i++)cin>>S[i]; sort(S+1,S+n+1); vector<pii>pass(m); for(auto &i:pass)cin>>i.f>>i.s; sort(all(pass)); for(int i=1;i<=m;i++){ D[i]=pass[i-1].f; C[i]=pass[i-1].s+C[i-1]; pref[i]=inf; } S[n+1]=X; for(int i=1;i<=n+1;i++){ auto it=upper_bound(all(pass),make_pair(S[i]%T,0),cmp)-pass.begin()-1; if(it<0||(pass[it]).f>(S[i]%T))continue; pref[it+1]=min(pref[it+1],S[i]); } dp[0]=W*(1+(X/T)); for(int i=1;i<=m;i++){ t.add((line){(1-i)*W,dp[i-1]-C[i-1]}); dp[i]=dp[i-1]+(W*(1+((X-D[i])/T))); if(pref[i]==inf)continue; dp[i]=min(dp[i],t.qry((pref[i]/T))+((pref[i]/T)*i*W)+C[i]); } cout<<dp[m]; } /* */

Compilation message (stderr)

coach.cpp: In function 'void setIO(std::string)':
coach.cpp:27:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   27 |         freopen((name+".in").c_str(),"r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
coach.cpp:28:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |         freopen((name+".out").c_str(),"w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...