标签:
对于每组数据,输出一个既约分数表示下载完全部电影所需的最少时间。
3 6 7 4 5 2 3 4 1 10 6 2
5/2 3/1
这道题一开始想复杂了,所有任务同时开始同时结束即可、比较单个任务的最长时间。
第一个版本测试的所有数据都没有问题,不知道哪里出的错总是WA
#include<stdio.h> struct DongSer { int a; int b; }; struct DongSer d; int da,db; void sim(int i,int j) { int k=i-1; if(i==j){i=j=1;} if(i%j==0){i=i/j;j=1;da=i;db=j;return;} if(j%i==0){j=j/i;i=1;da=i;db=j;return;} while(1) { if(k==1){da=i;db=j;return;} if(i%k==0&&j%k==0){i=i/k;j=j/k;} else {k--;} } } int main() { int i,j,k,n,vt; double m,t,p; while(scanf("%d%d",&n,&vt)!=EOF) { for(i=1;i<=n;i++) { scanf("%d%d",&d.a,&d.b); j+=d.a; t=d.a/d.b; if(t>p){p=t;k=i;da=d.a;db=d.b;} } m=j/vt; if(m>=p){da=j;db=vt;sim(da,db);printf("%d/%d\n",da,db);} if(m<p){sim(da,db);printf("%d/%d\n",da,db);} i=j=k=n=vt=m=t=p=da=db=d.a=d.b=0; } return 0; }
AC版本:
#include <iostream> #include <cstdio> using namespace std; int n, vt; int gcd (int a, int b) { while (b != 0) { int t; a %= b; t = a; a = b; b = t; } return a; } int main () { ios::sync_with_stdio(false); while (cin >> n >> vt) { int sum = 0; int rs = 0, rv = 1; for (int i = 0; i < n; ++i) { int s, v; cin >> s >> v; sum += s; if ((double)rs/rv < (double)s/v) { rs = s; rv = v; } } if ((double)rs/rv < (double)sum/vt) { rs = sum; rv = vt; } int k = gcd(rs, rv); cout << rs/k << "/" << rv/k << endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/dzzy/p/4733976.html