当前位置: 代码迷 >> 综合 >> HDU--6668--Polynomial--(胡搞题目)
  详细解决方案

HDU--6668--Polynomial--(胡搞题目)

热度:42   发布时间:2023-12-12 06:31:53.0

度度熊最近学习了多项式和极限的概念。
现在他有两个多项式 f(x)f(x) 和 g(x)g(x),他想知道当 xx 趋近无限大的时候,f(x)/g(x)f(x)/g(x) 收敛于多少。

Input

第一行一个整数 T (1≤T≤100)T (1≤T≤100) 表示数据组数。
对于每组数据,第一行一个整数 n (1≤n≤1,000)n (1≤n≤1,000),n?1n?1 表示多项式 ff 和 gg 可能的最高项的次数(最高项系数不一定非0)。
接下来一行 nn 个数表示多项式 ff,第 ii 个整数 fi (0≤fi≤1,000,000)fi (0≤fi≤1,000,000) 表示次数为 i?1i?1 次的项的系数。
接下来一行 nn 个数表示多项式 gg,第 ii 个整数 gi (0≤gi≤1,000,000)gi (0≤gi≤1,000,000) 表示次数为 i?1i?1 次的项的系数。
数据保证多项式 ff 和 gg 的系数中至少有一项非0。

Output

对于每组数据,输出一个最简分数 a/ba/b(aa 和 bb 的最大公约数为1)表示答案。
如果不收敛,输出 1/01/0。

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[i]/gcd(f[i],g[i]),g[i]/gcd(f[i],g[i]);

#include<iostream>
#include<cstdio>
using namespace std;
const int MAX=1000+10;
int f[MAX],g[MAX];
int gcd(int a,int b){return b?gcd(b,a%b):a;
}
int main(){int t;scanf("%d",&t); while(t--){int n;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&f[i]);for(int i=0;i<n;i++)scanf("%d",&g[i]);for(int i=n-1;i>=0;i--)if(g[i]!=0&&f[i]!=0){cout<<f[i]/gcd(f[i],g[i])<<"/"<<g[i]/gcd(f[i],g[i])<<endl;break;}else if(g[i]!=0&&f[i]==0){printf("0/1\n");break;}else if(g[i]==0&&f[i]!=0){printf("1/0\n");break;}	} 
}