zoukankan      html  css  js  c++  java
  • 济南学习 Day 5 T2 晚

    等比数列(sequence)

    【题目描述】

          判断一个数列是否为等比数列。

          等比数列的定义为能被表示成a,aq,aq^2,aq^3...的数列,其中a和q不等于0。

    【输入说明】

          输入文件的第一行有一个正整数T,表示数据组数。

          接下去有T组数据,每组数据的第一行一个整数n,接下来第二行n个数非负整数Ai,表示数列。

    【输出说明】

          对于每一个组的每个数据输出单独一行Yes或者No。

    【样例输入】

    2

    3

    1 1 1

    3

    1 4 2

    【样例输出】

    Yes

    No

    【数据范围】

    对于40%的数据 0<=Ai<=10^9

    对于100%的数据 T<=5,n<=1000,0<=Ai<=10^100 

     1 /*利用等比中项+高精乘法判断*/
     2 #include<iostream>
     3 #include<cstdio>
     4 #include<cstring>
     5 #define N 1010
     6 #define M 310
     7 using namespace std;
     8 int T,n;
     9 int t[M],r[M];
    10 int a[N][M];
    11 char s[M];
    12 int init()
    13 {
    14     int x=0,f=1;char c=getchar();
    15     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    16     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    17     return x*f;
    18 }
    19 void mul(int c[M],int a[M],int b[M])
    20 {
    21     int l1=a[0],l2=b[0];
    22     for(int i=1;i<=l1;i++)
    23     {
    24         int x=0;
    25         for(int j=1;j<=l2;j++)
    26         {
    27             c[i+j-1]+=a[i]*b[j]+x;
    28             x=c[i+j-1]/10;
    29             c[i+j-1]%=10;
    30         }
    31         c[i+l2]+=x;
    32     }
    33     c[0]=l1+l2;
    34     while(c[0]>1&&c[c[0]]==0)c[0]--;
    35 }
    36 int judge(int a[M],int b[M])
    37 {
    38     int l1=a[0],l2=b[0];
    39     if(l1!=l2)return 0;
    40     for(int i=1;i<=l1;i++)
    41     if(a[i]!=b[i])return 0;
    42     return 1;
    43 }
    44 int main()
    45 {
    46     freopen("sequence.in","r",stdin);
    47     freopen("sequence.out","w",stdout);
    48     T=init();
    49     while(T--)
    50     {
    51         n=init();
    52         memset(a,0,sizeof(a));
    53         for(int i=1;i<=n;i++)
    54         {
    55             scanf("%s",s);
    56             int l=strlen(s);a[i][0]=l;
    57             for(int j=1;j<=l;j++)
    58               a[i][j]=s[l-j]-'0';
    59         }
    60         if(a[1][0]==1&&a[1][1]==0)// 第一项且为0 
    61         {
    62             printf("No
    ");
    63             continue;
    64         }
    65         if(n==1)//  只有一个数 
    66         {
    67             printf("Yes
    ");
    68             continue;
    69         }
    70         if(a[2][0]==1&&a[2][1]==0) // 第二项为0 
    71         {
    72             printf("No
    ");
    73             continue;
    74         }
    75         if(n==2)// 只有两个数 
    76         {
    77             printf("Yes
    ");
    78             continue;
    79         }
    80         int flag=0;
    81         for(int i=3;i<=n;i++)
    82         {
    83             memset(t,0,sizeof(t));
    84             mul(t,a[i-2],a[i]);
    85             memset(r,0,sizeof(r));
    86             mul(r,a[i-1],a[i-1]);
    87             if(judge(t,r))continue;
    88             flag=1;break;
    89         }
    90         if(flag)
    91         {
    92             printf("No
    ");
    93             continue;
    94         }
    95         printf("Yes
    ");
    96     }
    97     fclose(stdin);fclose(stdout);
    98     return 0;
    99 }
  • 相关阅读:
    php 函数汇总
    php 图片base64编码生成dataurl和保存为图片
    bootstrap
    PHPWord
    js json排序
    UE用法
    判断移动端是苹果还是安卓,以及安卓版本
    shell终极操作
    LINUX yum用法
    jquery对checkbox的操作汇总
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6043778.html
Copyright © 2011-2022 走看看