最近,nono终于结束了每年一次的为期12个月的冬眠,醒来的第一件事就是——看电影!!nono发现最近一年出现了各种很好很强大的电影,例如这个、这个、还有这个。
于是nono直接把这些电影全部扔进了下载列表之中。已知nono下载了N部电影,其中第i部电影的大小为Si,该电影最大下载速度不会超过Vi,在任一时刻全部电影的下载速度之和不会超过Vt。现在nono希望知道在这些条件下至少需要多长时间才能将这些电影全部下完。
Input
多组输入。每组输入的第一行为两个整数N,Vt(0<N≤10
6, 0<Vt≤10
9)。接下来的N行每行两个整数表示Si, Vi(0<Si,Vi≤1000)。输入以EOF结束。
Output
对于每组数据,输出一个既约分数表示下载完全部电影所需的最少时间。
Sample Input
3 6 7 4 5 2 3 4 1 10 6 2
Sample Output
5/2 3/1
找出每首哥单独下载的时间,与所有歌全部在约定速度内下载时间的最大值即可
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int gcd(int n,int m) { int t,r; if(n<m) { t = n; n = m; m = t; } while(m) { r = n%m; n = m; m = r; } return n; } int main() { int n,v,a,b,sum,s,k,i,r; double maxn,t; while(~scanf("%d%d",&n,&v)) { sum = 0; maxn = 0; for(i = 0;i<n;i++) { scanf("%d%d",&a,&b); sum+=a; t = a*1.0/b; if(t>maxn) { maxn = t; s = a; k = b; } } if(sum*1.0/v>maxn) { s = sum; k = v; } r = gcd(s,k); printf("%d/%d\n",s/r,k/r); } return 0; }