제출 #1163641

#제출 시각아이디문제언어결과실행 시간메모리
1163641asli_bgAkcija (COCI21_akcija)C++20
50 / 110
1 ms584 KiB
#include<bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #define int long long typedef pair<int,int> pii; typedef vector<pii> vii; typedef vector<int> vi; #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define all(x) x.begin(),x.end() #define fi first #define se second #define pb push_back #define sp <<" "<< #define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl; #define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl; #define DEBUG(x) cout<<#x sp x<<endl; #define carp(x,y) ((x%MOD)*(y%MOD))%MOD #define topla(x,y) ((x%MOD)+(y%MOD))%MOD #define mid (l+r)/2 const int MAXN=2e3+5; const int INF=1e18; vii tut[MAXN]; bool used[MAXN]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n,k; cin>>n>>k; vii a(n+1); FORE(i,1,n+1){ cin>>a[i].fi>>a[i].se; tut[a[i].se].pb({a[i].fi,i}); } vii vec(n+1); priority_queue<pii> pq; int curt=n; pii ans={0,0}; while(curt){ for(auto el:tut[curt]) pq.push({-el.fi,el.se}); if(!pq.empty()){ int cost=pq.top().fi; int ind=pq.top().se; ans.fi++; ans.se+=cost*-1; vec[curt]={cost*-1,ind}; used[ind]=true; pq.pop(); } curt--; } cout<<ans.fi sp ans.se<<endl; int ii=1; bool f=true; while(ii<k){ if(!f) {cout<<0 sp 0<<endl;ii++;continue;} while(!pq.empty()) pq.pop(); //cout<<"vec"<<endl; //FORE(i,1,n+1) cout<<vec[i].fi sp vec[i].se<<endl; //değişim yapılabiliyor mu curt=n; int res=INF; int temp=-1; while(curt){ for(auto el:tut[curt]){ if(!used[el.se]) pq.push({-el.fi,el.se}); } if(!pq.empty() and vec[curt].se!=0){ //değişim yapılabilir int cost=pq.top().fi; int ind=pq.top().se; if(res>cost*-1-vec[curt].fi){ res=cost*-1-vec[curt].fi; temp=ind; } } curt--; } //DEBUG(temp); //DEBUG(res); if(temp!=-1){ //değişim yapılabiliyorsa used[temp]=true; cout<<ans.fi sp ans.se+res<<endl; } else{ //çıkarma yapmalıyım FORE(i,1,n+1) used[i]=false; res=0; temp=-1; int tt=0; FORE(i,1,n+1){ used[vec[i].se]=true; if(vec[i].fi>res){ res=vec[i].fi; temp=vec[i].se; tt=i; } } //DEBUG(temp); //DEBUG(res); if(temp!=-1){ //çıkarma yapabiliyorum used[temp]=false; vec[tt]={0,0}; ans.se-=res; ans.fi-=1; cout<<ans.fi sp ans.se<<endl; } else{ f=false; cout<<0 sp 0<<endl; } } ii++; } }
#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...