Pagini recente » Cod sursa (job #1458872) | Cod sursa (job #1190432) | Cod sursa (job #165877) | Cod sursa (job #861191) | Cod sursa (job #1573166)
# include <cstdio>
# include <algorithm>
# define DIM 100010
using namespace std;
FILE *fin = fopen("garaj.in", "r");
FILE *fout = fopen("garaj.out", "w");
long long s,t[DIM],c[DIM],i,n,m,st,dr,mij,trans[DIM],k,nr;
char b[1200020];
long long maxtrans(int r){
long long s=0;
for(int i=1;i<=n;i++){
s+=(r/t[i])*c[i];
}
return s;
}
int main () {
fscanf(fin, "%lld%lld\n", &n, &m);
fread(b, 1, 1200020, fin);
// ia tot continutul fisierului si il pune ca secventa de simboluri
// in vectorul de caractere b, incepand cu pozitia 0 si la final pune caracterul cu codul 0
//for(i=1;i<=n;i++){
// fscanf(fin, "%lld%lld", &c[i], &t[i]);
// t[i]*=2;
//}
int val = 0;
int p = 0, j = 0;
for (i=0; b[i] != 0; i++) {
if (b[i] >= '0' && b[i] <= '9') {
val = val * 10 + b[i]-'0';
} else
if (b[i-1] >= '0' && b[i-1] <= '9') {
if (p == 0) {
c[++j] = val;
p = 1;
val = 0;
} else {
t[j] = val*2;
val = 0;
p = 0;
}
}
}
st=1;
dr=(m/c[1] + 1)*t[1];
while(st<=dr){
mij=(st+dr)/2;
if(maxtrans(mij)>=m)
dr=mij-1;
else
st=mij+1;
}
//fout<<st<<" ";
for(i=1;i<=n;i++){
trans[i]=(st/t[i])*c[i];
}
sort(trans+1,trans+n+1);
k=n;
s = 0;
while(s<m){
s += trans[k];
k--;
nr++;
}
fprintf(fout,"%lld %lld\n", st, nr);
return 0;
}