제출 #522256

#제출 시각아이디문제언어결과실행 시간메모리
522256new_accHiring (IOI09_hiring)C++14
100 / 100
557 ms22796 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
#define rep(a, b) for(int a = 0; a < (int)(b); a++)
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
struct st{
	ll a,b;
	int id;
	bool operator>(st pom){
		return a*pom.b>b*pom.a;
	}
	st operator*(st pom){
		st res;
		res.a=a*pom.a;
		res.b=b*pom.b;
		ll g=__gcd(res.a,res.b);
		res.a/=g,res.b/=g;
		return res;
	}
};
const int N=5e5+10;
st t[N];
void solve(){
	int n,il;
	ll w;
	cin>>n>>w;
	rep(i,n){ cin>>t[i].a>>t[i].b; t[i].id=i;}
	sort(t,t+n,[](st a,st b){
		return b>a;
	});
	set<pair<int,int> >mul;
	ll curr=0;
	st mini;
	rep(i,n){
		ll xd=(w*t[i].b)/t[i].a;
		mul.insert({t[i].b,t[i].id});
		curr+=t[i].b;
		while(curr>xd){
			auto it=mul.end();
			it--;
			curr-=(*(it)).fi;
			mul.erase(it);
		}
		if(il<=(int)mul.size()){
			st akt;
			akt.a=curr,akt.b=1;
			akt=akt*t[i];
			if(il<(int)mul.size()) mini=akt;
			else if(mini>akt) mini=akt;
		}
		il=max(il,(int)mul.size());
	}
	mul.clear();
	curr=0;
	rep(i,n){
		ll xd=(w*t[i].b)/t[i].a;
		mul.insert({t[i].b,t[i].id});
		curr+=t[i].b;
		while(curr>xd){
			auto it=mul.end();
			it--;
			curr-=(*(it)).fi;
			mul.erase(it);
		}
		if((int)mul.size()==il){
			st akt;
			akt.a=curr,akt.b=1;
			akt=akt*t[i];
			if(mini.a==akt.a and mini.b==akt.b) break;
		}
	}
	cout<<il<<"\n";
	for(auto it=mul.begin();it!=mul.end();it++) cout<<(*(it)).se+1<<"\n";
}
int main(){
	ios_base::sync_with_stdio(0),cin.tie(0);
	solve();
}

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

hiring.cpp: In function 'void solve()':
hiring.cpp:75:12: warning: 'il' may be used uninitialized in this function [-Wmaybe-uninitialized]
   75 |  cout<<il<<"\n";
      |            ^~~~
hiring.cpp:72:21: warning: 'mini.st::b' may be used uninitialized in this function [-Wmaybe-uninitialized]
   72 |    if(mini.a==akt.a and mini.b==akt.b) break;
      |       ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
hiring.cpp:72:4: warning: 'mini.st::a' may be used uninitialized in this function [-Wmaybe-uninitialized]
   72 |    if(mini.a==akt.a and mini.b==akt.b) break;
      |    ^~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...