제출 #416658

#제출 시각아이디문제언어결과실행 시간메모리
416658REALITYNBAutobahn (COI21_autobahn)C++14
20 / 100
2 ms460 KiB
#include <bits/stdc++.h> #define int long long #define inf 1e12 #define all(a) a.begin(),a.end() using namespace std; signed main(){ ios_base::sync_with_stdio(0); cin.tie(nullptr); int n,k,x ; cin>>n>>k>>x; vector<int> l(n) ,t(n) , r(n) , events ; for(int i=0;i<n;i++){ cin>>l[i]>>t[i]>>r[i] ; int le = l[i],re=r[i],rr = l[i]+t[i]-1 ; events.push_back(le); events.push_back(re); events.push_back(rr); events.push_back(re+1) ; events.push_back(rr+1) ; events.push_back(re-x+1) ; events.push_back(rr-x+1) ; events.push_back(le-x+1); events.push_back(re-x) ; events.push_back(rr-x) ; } events.push_back(inf) ; sort(all(events)) ; auto it = unique(all(events),[&](int a ,int b){return a==b;}) ; events.resize(distance(events.begin(),it)) ; vector<int> illegals(events.size()) ; vector<int> num(events.size()) ; for(int i=0;i<n;i++){ int j = lower_bound(all(events),l[i])-events.begin() ; num[j]++ ; int k = lower_bound(all(events),r[i]+1)-events.begin() ; num[k]-- ; } for(int i=0;i<n;i++){ int le = l[i],re=r[i] ,rr=l[i]+t[i]-1 ; if(rr<=re){ int j = lower_bound(all(events),rr+1)-events.begin(); illegals[j]++; j = lower_bound(all(events),re+1)-events.begin() ; illegals[j]--; } } for(int i=1;i<events.size();i++) num[i]+=num[i-1],illegals[i]+=illegals[i-1] ; int curl = events[0] , curr =-inf, val = 0 , j = 0 , ans = 0 ; /* for(int i=0;i<events.size();i++){ cout << "minute :" << events[i] << " " << num[i] << " "<< illegals[i] << endl ; }*/ int goal = 0 ; for(int i=0;i+1<events.size();i++){ curl=events[i] ; if(curr<curl){ curr = curl ; val =((int)(num[i]>=k))*illegals[i]; j=i+1 ; } else{ val-=(events[i]-events[i-1])*(illegals[i-1])*((int)(num[i-1]>=k)) ; } while(curr-curl+1<x){ if(events[j]>x+curl-1){ val+=(curl+x-1-curr)*(illegals[j-1])*((int)(num[j-1]>=k)) ; curr = curl+x-1 ; break ; } ++j; val+=(min(events[j]-1,curl+x-1)-curr)*((int)(num[j-1]>=k))*illegals[j-1] ; curr = min(events[j]-1,curl+x-1) ; } if(val>ans){ ans=val; goal = events[i] ; } // cout <<events[i] << " " << val << " " << j << " " << curr << endl ; } cout << ans ; return 0; }

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

autobahn.cpp: In function 'int main()':
autobahn.cpp:40:7: warning: unused variable 'le' [-Wunused-variable]
   40 |   int le = l[i],re=r[i] ,rr=l[i]+t[i]-1 ;
      |       ^~
autobahn.cpp:48:15: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |  for(int i=1;i<events.size();i++) num[i]+=num[i-1],illegals[i]+=illegals[i-1] ;
      |              ~^~~~~~~~~~~~~~
autobahn.cpp:54:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |  for(int i=0;i+1<events.size();i++){
      |              ~~~^~~~~~~~~~~~~~
autobahn.cpp:53:5: warning: variable 'goal' set but not used [-Wunused-but-set-variable]
   53 | int goal = 0 ;
      |     ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...