AOJ 0186 - Aizu Chicken

会津鶏肉の量で二分探索する.

#include<iostream>
#include<cstdio>

const int INF = 1 << 24;
int q_chicken, b, p_chicken, p_aizu, q_aizu;

bool C(int x){//x: 買う会津鶏肉の量
	if(x * p_aizu > b || x > q_aizu){//資金超えるか用意された量より多い
		return false;
	}
	return x + (b-x*p_aizu) / p_chicken >= q_chicken;
}

int main(){
	while(std::cin >> q_chicken >> b >> p_aizu >> p_chicken >> q_aizu, !std::cin.eof()){
		int ub = INF, lb = 0;
		for(int i=0;i<100;i++){
			int mid = (lb + ub) / 2;
			if(C(mid))lb = mid;
			else ub = mid;
		}

		if(lb == 0){//会津鶏肉が買えない,残念
			puts("NA");
		}else{
			printf("%d %d\n", lb, (b-lb*p_aizu)/p_chicken);
		}
	}
}