【2019百度之星初赛一A题 HDU 6668 --- Polynomial】

【2019百度之星初赛一A题 HDU 6668 --- Polynomial】


Description

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

Input

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

Output

对于每组数据,输出一个最简分数 a/b(a 和 b 的最大公约数为1)表示答案。
如果不收敛,输出 1/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 ( 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

  • 解题思路:
    水题,看代码,只需要比较两式的系数不为0的最高次项。

AC代码:

#include 
#include 
using namespace std;
#define MAXN 1005
int a[MAXN],b[MAXN];

int gcd(int a,int b)
{
    while(b^=a^=b^=a%=b);
    return a;
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        for(int i=0;i<n;i++)
            scanf("%d",&b[i]);
        int i=n-1;
        while(i>=0 && a[i]==0) i--;
        int j=n-1;
        while(j>=0 && b[j]==0) j--;
        if(i>j)
            cout << "1/0" << endl;
        else if(i<j)
            cout << "0/1" << endl;
        else
        {
            int x = gcd(a[i],b[j]);
            cout << a[i]/x << "/" << b[j]/x << endl;
        }
    }
    return 0;
}

你可能感兴趣的:(百度之星,ACM,hdu,6668,百度之星初赛,Polynomial)