程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Codeforces Round #318-(C. Bear and Poker)

Codeforces Round #318-(C. Bear and Poker)

編輯:C++入門知識

Codeforces Round #318-(C. Bear and Poker)


題意:

現在有n個人,每個人都持有a[i]這個價值的牌,並且每個人可以每次無限次數的使自己的牌擴大2倍,擴大3倍,然後問你是否可能使得最終所有人的牌的價值數變成一樣的。

思路:

很明顯,因為最後所有數都要相同的話,那麼只可能是和最大的那個數相同的,並且它只能由擴大2倍,3倍來得到,所以我們可以使所有的數都不停的除以2與3,直到不能除為止,然後判斷除完以後所有的數是否相同,如果相同,則說明是可以的,否則,則是不可以的。

#include
#include
#include
#include
#include
using namespace std;
#define eps 1e-8
#define inf 99999999
#define maxn 100010
typedef __int64 ll;
ll a[maxn];
int main(){
    int n;
    ll max1=-1;
    scanf(%d,&n);
    for(int i=1;i<=n;i++){
        scanf(%I64d,&a[i]);
    }
    bool ff=false;
    for(int i=1;i<=n;i++){
        ll res=a[i];
        while(a[i]%2==0) a[i]=a[i]/2;
        while(a[i]%3==0) a[i]=a[i]/3;
    }
    ll res=a[1];
    bool f1=false;
    for(int i=2;i<=n;i++){
        if(res!=a[i]){
            f1=true; break;
        }
    }
    if(f1) printf(No
);
    else printf(Yes
);
}
/*
2
6 18
*/

 

一開始我想錯了,我想成如果它能被最大的數整除而且除數%2==0||%3==0,但是這樣是不對的,因為10,1,1,1的時候,10是由2與5所組成的,所以是不可以的。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved