Advertisement

上海计算机学会2023年12月月赛C++丙组T3数轴旅行

阅读量:

数轴旅行

内存限制: 256 Mb时间限制: 1000 ms

题目描述

你要开始一场数轴旅行,初始时,你所在的位置为 x=0 ,你想要去 x=d 位置。

给定 n 个整数a1​,a2​,...,an​,表示每次你可以往左移动 ai​ 个单位或往右移动 ai​ 个单位。

请问,最终能否到达 x=d 位置?能则输出 Yes,不能输出 No

输入格式

输入共两行:
第一行,两个整数 n,d
第二行,n 个正整数 a1​,a2​,...an​

输出格式

输出能否达到最终目标位置。

数据范围
  • 对于 30% 的数据,满足 1≤n≤10,1≤ai​≤10,−20≤d≤20。
  • 对于 60% 的数据,满足 1≤n≤103,1≤ai​≤103,−104≤d≤104。
  • 对于 100% 的数据,满足 1≤n≤105,1≤ai​≤109,−109≤d≤109。
样例数据

输入:
2 -4
6 8
输出:
Yes
说明:
向左走两次6,再向右走一次8
输入:
2 5
6 8
输出:
No

解析:

若d能整除ai的最大公约数,则yes 否则no

详见代码:

复制代码
 #include <bits/stdc++.h>

    
 using namespace std;
    
 int n,d;
    
 int k;
    
 int gcd(int x,int y){//辗转相除法求最大公约数
    
     if (y==0) return x;
    
     return gcd(y,x%y);
    
 }
    
 int main() {
    
     cin>>n>>d;
    
     cin>>k;
    
     for(int i=2;i<=n;i++){
    
     int x;
    
     cin>>x;
    
     k=gcd(k,x);
    
     }
    
     if (d%k==0){
    
     cout<<"Yes";
    
     }else{
    
     cout<<"No";
    
     }
    
     return 0;
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~