hdu 5429 Geometric Progression(高精度)

来源:互联网 发布:手机淘宝在那里改地址 编辑:程序博客网 时间:2024/06/05 03:02

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5429

解题思路:

官方题解:

判断是否为等比数列,可以检验对所有1 < i < n \quad A[i-1]*A[i+1]=A[i]*A[i]1<i<nA[i1]A[i+1]=A[i]A[i] 是否都成立。

直接高精度也是资词的。

比较简单的方法是选择若干质数(保证乘积大于10^{200}10200),在模意义下检验。复杂度O(k*n)O(kn)kk表示选取的质数个数。

算法思想:

正如题解所解释的,只要判断(0,n-1)之间的数,是否符合A[i1]A[i+1]=A[i]A[i] 就行了,然后特判等于0的情况就可以了。不过,比赛时候真的很挫,以前写C/C++的时候while里面经常用T--,但是用java里面不能这么写,于是乎,把这句写在了最后面,然而中间有特判,使用了continue;于是乎,赛后仍然wrong了十几次,才发现,原来是这里错了。。。泪奔。。。

AC代码:

import java.math.BigDecimal;import java.util.Scanner;public class Main {    public static void main(String[] args){        Scanner sca = new Scanner (System.in);        BigDecimal a[] = new BigDecimal[110];        BigDecimal ZERO = BigDecimal.ZERO;        int T = sca.nextInt(),t = 1;        while(t <= T){        t++;            int n = sca.nextInt();            int sum = 0;            for(int i = 0; i < n; i++){                a[i] = sca.nextBigDecimal();                if(a[i].equals(ZERO))                    sum++;            }            if(n == 1){                System.out.println("Yes");                continue;            }            if(sum != 0){            if(sum == n)            System.out.println("Yes");            else             System.out.println("No");                continue;            }            int flag3 = 1;            for(int i = 1; i < n-1; i++){                if(!(a[i].multiply(a[i])).equals(a[i-1].multiply(a[i+1]))){                    flag3 = 0;                    break;                }            }            if(flag3 == 1)                System.out.println("Yes");            else                System.out.println("No");        }    }}


0 0
原创粉丝点击