zoukankan      html  css  js  c++  java
  • [BZOJ1385] [Baltic2000] Division expression (数学)

    Description

      除法表达式有如下的形式: X1/X2/X3.../Xk 其中Xi是正整数且Xi<=1000000000(1<=i<=k,K<=10000) 除法表达式应当按照从左到右的顺序求,例如表达式1/2/1/2的值为1/4.但可以在表达式中国入括号来改变计算顺序,例如(1/2)/(1/2)的值为1.现给出一个除法表达式E,求是告诉是否可以通过增加括号来使其为E',E'为整数

    Input

      先给出一个数字D,代表有D组数据. 每组数据先给出一个数字N,代表这组数据将有N个数。 接下来有N个数,分别代表X1,X2,X3,...,XN

    Output

      如果能使得表达式的值为一个整数,则输出YES.否则为NO

    Sample Input

    2
    4
    1
    2
    1
    2
    3
    1
    2
    3

    Sample Output

    YES
    NO

    HINT

    Source

    Solution

      第一个数必为分子,第二个数必为分母,剩下的数既可以是分子又可以是分母,所以当表达式形如$X_1/(X_2/X_3/cdots/X_N)$时最有可能是整数

      判断$X_2$能否被其他数的积整除即可(你不会傻到把这些数乘起来吧)

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int a[10005];
     4  
     5 int gcd(int x, int y)
     6 {
     7     return y ? gcd(y, x % y) : x;
     8 }
     9  
    10 int main()
    11 {
    12     int d, n, t;
    13     scanf("%d", &d);
    14     while(d--)
    15     {
    16         scanf("%d", &n);
    17         for(int i = 1; i <= n; ++i)
    18             scanf("%d", a + i);
    19         if(n == 1)
    20         {
    21             puts("YES");
    22             continue;
    23         }
    24         swap(a[1], a[2]);
    25         for(int i = 2; i <= n && a[1] > 1; ++i)
    26             t = gcd(a[i], a[1]), a[1] /= t;
    27         if(a[1] == 1) puts("YES");
    28         else puts("NO");
    29     }
    30     return 0;
    31 }
    View Code
  • 相关阅读:
    android滤镜效果
    Android ListView的OnItemClickListener详解
    Categories
    利用Stack倒序List,利用Set使List不能添加重复元素
    IOS数据类型对应输出格式
    win7的dropbox无法启动 重新安装也没用
    记一次datatable的删除操作
    winform动态创建radio以及使用委托判断哪个选中
    临时表列的长度
    退出winform应用程序
  • 原文地址:https://www.cnblogs.com/CtrlCV/p/5668724.html
Copyright © 2011-2022 走看看