제출 #434917

#제출 시각아이디문제언어결과실행 시간메모리
434917dqhungdlAutobahn (COI21_autobahn)C++17
100 / 100
75 ms15416 KiB
#include <bits/stdc++.h> #define int long long using namespace std; typedef pair<int,int> ii; int N,K,X; vector<ii> events,overtime,charge; int read() { char c=getchar(); while(!isdigit(c)) c=getchar(); int rs=0; while(isdigit(c)) { rs=rs*10+c-'0'; c=getchar(); } return rs; } int32_t main() { #ifdef ACM freopen("input","r",stdin); #endif N=read(),K=read(),X=read(); int l,t,r; for(int i=0;i<N;i++) { l=read(),t=read(),r=read(); if(l+t<=r) { overtime.push_back({l+t,1}); overtime.push_back({r+1,-1}); } events.push_back({l,1}); events.push_back({r+1,-1}); } sort(events.begin(),events.end()); int people=0,pivot; for(ii event:events) { people+=event.second; if(event.second==1&&people==K) pivot=event.first; else if(event.second==-1&&people==K-1) { overtime.push_back({pivot,2}); overtime.push_back({event.first,-2}); } } sort(overtime.begin(),overtime.end()); //for(ii tmp:overtime) // cerr<<tmp.first<<' '<<tmp.second<<'\n'; int numOvertime=0; bool overload=false; for(ii event:overtime) { if(abs(event.second)==1) numOvertime+=event.second; else overload=(event.second==2); if(overload) { if(charge.size()>0&&charge.back().first==event.first) charge.back().second=numOvertime; else charge.push_back({event.first,numOvertime}); } else if(charge.size()>0&&charge.back().first==event.first) charge.back().second=0; else charge.push_back({event.first,0}); } //for(ii tmp:charge) // cerr<<tmp.first<<' '<<tmp.second<<'\n'; vector<int> S(charge.size()); for(int i=0;i<charge.size()-1;i++) { S[i]=(charge[i+1].first-charge[i].first)*charge[i].second; if(i>0) S[i]+=S[i-1]; } int cur=0,rs=0; for(int i=0;i<charge.size()-1;i++) { while(cur<charge.size()-1&&charge[cur+1].first<=charge[i].first+X-1) cur++; int sum=0; if(cur>0) sum=S[cur-1]-(i==0?0:S[i-1]); sum+=(charge[i].first+X-charge[cur].first)*charge[cur].second; rs=max(rs,sum); } cur=0; for(int i=0;i<charge.size()-1;i++) { while(cur<i&&charge[cur].first+X<charge[i+1].first) cur++; int sum=S[i]-(cur==0?0:S[cur-1]); if(cur>0) sum+=(charge[cur].first-charge[i+1].first+X)*charge[cur-1].second; rs=max(rs,sum); } cout<<rs; }

컴파일 시 표준 에러 (stderr) 메시지

autobahn.cpp: In function 'int32_t main()':
autobahn.cpp:71:15: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   71 |  for(int i=0;i<charge.size()-1;i++) {
      |              ~^~~~~~~~~~~~~~~~
autobahn.cpp:77:15: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |  for(int i=0;i<charge.size()-1;i++) {
      |              ~^~~~~~~~~~~~~~~~
autobahn.cpp:78:12: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |   while(cur<charge.size()-1&&charge[cur+1].first<=charge[i].first+X-1)
      |         ~~~^~~~~~~~~~~~~~~~
autobahn.cpp:87:15: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |  for(int i=0;i<charge.size()-1;i++) {
      |              ~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...