Cod sursa(job #1737992)

Utilizator valentin50517Vozian Valentin valentin50517 Data 5 august 2016 15:13:11
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;
struct my{int x,y,p;} A[110],R[110];
bool cmp(my a,my b){return a.x*b.y > b.x*a.y;}
int N,st,dr=110,m,L;
bool ck(int t){
	int s1=0,s2=0,i;
	for(i = 0;i<N;i++) s1+=t/A[i].x;
	if(s1<L) return false;
	i=0;
	while(s2 < L && s1>=L && i<N){
		int c = min(t/A[i].y,L-s2);
		R[i].y = c;
		s2+=c;
		s1-=c*A[i].y/A[i].x;
		R[i].x = t/A[i].x - c*A[i].y/A[i].x; 
		++i;
	}
	R[i].y = 0;
	return s2 >= L && s1>=L;
}
int main(){
	ifstream cin("lacate.in");
	ofstream cout("lacate.out");
	cin >> N >> L;
	int i = 0;
	for(i = 0;i<N;i++){cin >> A[i].x >> A[i].y;A[i].p=i;}
	sort(A,A+N,cmp);
	while(st<dr-1){
		m = (st+dr)/2;
		(ck(m) ? dr : st) = m; 
	}
	for(;!ck(st);st++);
	cout << st << '\n';
	i=0;
	while(R[i].y){cout << R[i].x << ' ' << R[i].y << '\n';++i;}
	for(;i<N;i++) cout << st/A[i].x << ' ' << 0 << '\n';  
 	return 0;
}