제출 #1080377

#제출 시각아이디문제언어결과실행 시간메모리
1080377antonFire (BOI24_fire)C++17
0 / 100
1 ms416 KiB
#include<bits/stdc++.h> using namespace std; #define pii pair<int, int> const int MAX_S = 20; int N, M; vector<int> times; vector<vector<int>> calc_bl(vector<int> optimal_next){ int n = optimal_next.size(); vector<vector<int>> bl(MAX_S, vector<int>(n)); for(int i = 0; i<n; i++){ bl[0][i] = optimal_next[i]; } for(int step =1; step<MAX_S; step++){ for(int i = 0; i<n; i++){ bl[step][i] = bl[step-1][bl[step-1][i]]; } } return bl; } int get_cost(vector<vector<int>>& bl, int pos, int begin){ int cost = 0; for(int i = MAX_S-1; i>=0; i--){ if(times[bl[i][pos]]<times[begin]+M){ pos = bl[i][pos]; cost += (1LL<<i); } } if(times[bl[0][pos]]>=times[begin]+M){ return cost+1; } return 1e9; } signed main(){ cin>>N>>M; vector<pii> inters; for(int i = 0; i<N; i++){ pii inter; cin>>inter.first>>inter.second; if(inter.first>inter.second){ inters.push_back({0, inter.second}); inters.push_back({inter.first, inter.second+M}); inters.push_back({inter.first+M, 2*M-1}); } else{ inters.push_back({inter.first, inter.second}); inters.push_back({inter.first+M, inter.second+M}); } } for(auto inter: inters){ times.push_back(inter.first); times.push_back(inter.second); } sort(times.begin(), times.end()); for(pii& e: inters){ if(e.first<e.second){ e.first = lower_bound(times.begin(), times.end(), e.first) - times.begin(); e.second = lower_bound(times.begin(), times.end(), e.second)- times.begin(); } } sort(inters.begin(), inters.end()); vector<pii> ev; set<pii> cur_open; for(int i = 0; i<inters.size(); i++){ auto e = inters[i]; ev.push_back({e.first, i}); } vector<int> opt(times.size()); sort(ev.begin(), ev.end()); reverse(ev.begin(), ev.end()); for(int i = 0; i<times.size(); i++){ while(ev.size()>0 && ev.back().first==i){ auto cur_ev = ev.back(); ev.pop_back(); cur_open.insert(pii({inters[cur_ev.second].second, cur_ev.second})); } if(cur_open.size()>0){ opt[i] = (--cur_open.end())->first; } else{ opt[i] = i; } while(cur_open.size()>0 && cur_open.begin()->first == i){ cur_open.erase(cur_open.begin()); } } /*for(int i = 0; i<times.size(); i++){ cout<<times[i]<<" "<<times[opt[i]]<<endl; }*/ auto bl = calc_bl(opt); int res =1e6; for(int i = 0; i<times.size(); i++){ res = min(res, get_cost(bl, i, i)); } if(res==1e6){ cout<<-1<<endl; } else{ cout<<res<<endl; } }

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

Main.cpp: In function 'int main()':
Main.cpp:79:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |     for(int i = 0; i<inters.size(); i++){
      |                    ~^~~~~~~~~~~~~~
Main.cpp:87:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |     for(int i = 0; i<times.size(); i++){
      |                    ~^~~~~~~~~~~~~
Main.cpp:109:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  109 |     for(int i = 0; i<times.size(); i++){
      |                    ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...