您的位置:首页 > 其它

hdu 5912 Fraction 2016中国大学生程序设计竞赛(长春) 水题

2016-10-26 14:38 519 查看
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5912

题意:

输入a1…an,b1…bn,化简这个东西



分析:

n不超过8,an,bn不超过10,所以暴力搞搞就好啦~~~

注意有可能爆int滴~

每轮的迭代过程就这样:从an开始,取倒数,乘bn,加an-1,再取倒数……迭代n轮之后除以最大公约数化简。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int t,n;
int a[12],b[12];
ll p,q;
ll gcd(ll a,ll b) {
if(b==0)
return a;
return gcd(b,a%b);
}
void solve() {
ll x=a
,y=1;//初始化为an,每轮迭代都记为x/y
ll g=1;
for(int i=n;i>=1;i--) { //迭代n次
ll x2=x,y2=y;//记录下来
x=y2*b[i]+x2*a[i-1];
y=x2;
g=gcd(x,y);
x/=g;
y/=g;
}
g=gcd(x,y);
p=x/g,q=y/g;
}
int main() {
scanf("%d",&t);
a[0]=0;
for(int i=1;i<=t;i++) {
scanf("%d",&n);
for(int j=1;j<=n;j++)
scanf("%d",&a[j]);
for(int j=1;j<=n;j++)
scanf("%d",&b[j]);
solve();
printf("Case #%d: %I64d %I64d\n",i,p,q);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐