HDU6668 Polynomial
度度熊最近学习了多项式和极限的概念。
现在他有两个多项式 f(x) 和 g(x),他想知道当 x 趋近无限大的时候,f(x)/g(x) 收敛于多少。
Input
第一行一个整数 T (1≤T≤100) 表示数据组数。
对于每组数据,第一行一个整数 n (1≤n≤1,000),n−1 表示多项式 f 和 g 可能的最高项的次数(最高项系数不一定非0)。
接下来一行 n 个数表示多项式 f,第 i 个整数 fi (0≤fi≤1,000,000) 表示次数为 i−1 次的项的系数。
接下来一行 n 个数表示多项式 g,第 i 个整数 gi (0≤gi≤1,000,000) 表示次数为 i−1 次的项的系数。
数据保证多项式 f 和 g 的系数中至少有一项非0。
Output
对于每组数据,输出一个最简分数 a/b(a 和 b 的最大公约数为1)表示答案。
如果不收敛,输出 1/0。
Examples
Sample Input
3
2
0 2
1 0
2
1 0
0 2
3
2 4 0
1 2 0
Sample Output
1/0
0/1
2/1
样例描述
这些多项式分别为
f
(
x
)
=
2
x
f(x) = 2x
f(x)=2x
g
(
x
)
=
1
g(x) = 1
g(x)=1
f
(
x
)
=
1
f(x) = 1
f(x)=1
g
(
x
)
=
2
x
g(x) = 2x
g(x)=2x
f
(
x
)
=
4
x
+
2
f(x) = 4x + 2
f(x)=4x+2
g
(
x
)
=
2
x
+
1
g(x) = 2x + 1
g(x)=2x+1
Hint
题意:
题解:
签到题, 从后往前找到第一个非0项, 判一下
经验小结:
#include<bits/stdc++.h>
using namespace std;
#define ms(x, n) memset(x,n,sizeof(x));
typedef long long LL;
const int inf = 1<<30;
const int maxn = 1010;
//const LL inf = 0x3f3f3f3f3f3f3f3f;
int T, n, g[maxn], f[maxn];
int main()
{
cin >> T;
while(T--){
cin >> n;
for(int i = 0; i < n; ++i)
cin >> f[i];
for(int i = 0; i < n; ++i)
cin >> g[i];
int t = n-1;
while(f[t]==0 && g[t]==0 && t >= 0)
--t;
if(f[t] == 0 && g[t] == 0)
printf("0/0\n");
else if(f[t] == 0)
printf("0/1\n");
else if(g[t] == 0)
printf("1/0\n");
else{
int gcd = __gcd(f[t], g[t]);
printf("%d/%d\n",f[t]/gcd, g[t]/gcd);
}
}
return 0;
}