제출 #354308

#제출 시각아이디문제언어결과실행 시간메모리
354308doowey카니발 티켓 (IOI20_tickets)C++14
100 / 100
2017 ms158820 KiB
#include <bits/stdc++.h> #include "tickets.h" using namespace std; typedef long long ll; typedef pair<ll,int> pii; #define fi first #define se second #define mp make_pair const int N = 1510; priority_queue<pii> low[N]; priority_queue<pii> high[N]; vector<vector<int>> sign; vector<int> tw[N][2]; vector<vector<int>> sol; ll find_maximum(int k, vector<vector<int>> x) { int n = x.size(); int m = x[0].size(); ll sum = 0; priority_queue<pii> vl; sign.resize(n); sol.resize(n); for(int i = 0 ; i < n; i ++ ){ sign[i].resize(m); sol[i].resize(m,-1); for(int j = 0 ; j < k ; j ++ ){ sum -= x[i][j]; sign[i][j]=-1; low[i].push(mp(x[i][j],j)); } for(int j = 0; j < m ; j ++ ){ high[i].push(mp(x[i][j],j)); } vl.push(mp(low[i].top().fi + high[i].top().fi, i)); } int it; int i1, i2; for(int flip = 0; flip < n * k / 2; flip ++ ){ sum += vl.top().fi; it = vl.top().se; vl.pop(); i1 = low[it].top().se; i2 = high[it].top().se; low[it].pop(); high[it].pop(); sign[it][i1]=0; sign[it][i2]=+1; high[it].push(mp(x[it][i1],i1)); while(!high[it].empty() && sign[it][high[it].top().se] == +1){ high[it].pop(); } if(!low[it].empty() && !high[it].empty()){ vl.push(mp(low[it].top().fi + high[it].top().fi, it)); } } for(int i = 0 ; i < n; i ++ ){ for(int j = 0 ; j < m ; j ++ ){ if(sign[i][j] == -1){ tw[i][0].push_back(j); } else if(sign[i][j] == +1){ tw[i][1].push_back(j); } } } for(int r = 0; r < k ; r ++ ){ vector<pii> ord; for(int i = 0 ; i < n; i ++ ){ ord.push_back(mp(tw[i][1].size(), i)); } sort(ord.begin(), ord.end()); for(int i = 0 ; i < ord.size(); i ++ ){ if(i < ord.size() / 2){ sol[ord[i].se][tw[ord[i].se][0].back()]=r; tw[ord[i].se][0].pop_back(); } else{ sol[ord[i].se][tw[ord[i].se][1].back()]=r; tw[ord[i].se][1].pop_back(); } } } allocate_tickets(sol); return sum; }

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

tickets.cpp: In function 'll find_maximum(int, std::vector<std::vector<int> >)':
tickets.cpp:77:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, int>, std::allocator<std::pair<long long int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |         for(int i = 0 ; i < ord.size(); i ++ ){
      |                         ~~^~~~~~~~~~~~
tickets.cpp:78:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, int>, std::allocator<std::pair<long long int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |             if(i < ord.size() / 2){
      |                ~~^~~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...