码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two

时间:2019-06-24 12:32:15      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:sed   代码   contest   blank   int   没有   color   one   不可   

传送门

D. Divide by three, multiply by two

•题意

给你一个数 x,有以下两种操作,x 可以任选其中一种操作得到数 y

1.如果x可以被3整除,y=x/3

2.y=x*2

y 再执行上述两种操作的一种得到数 z;

  接着对 z 得到......

  这样依次执行了 n-1 次会得到 n 个数;

  现在给你这 n 个数,让你按照上述规则给这 n 个数排序,使得其满足

  a1=x , a2=y , a3=z , ........

 

•思路

对于任意一个数 p,能通过两类操作得到:

①p=3p /3

②p=x/2 *2

技术图片

因为GCD(2,3) = 1,所以右边的等式是不可能成立的;

  所以 p只能由①②中的一种情况得到;

  并且这 n 个数各不相同;

  那么,任意选取一个数,依次向前推到第一个数,依次向后推即可得到答案;

 

•代码

技术图片
#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<ll,int> mp;
int main()
{
    int n;
    cin>>n;
    ll x;
    for(int i=0;i<n;i++)
    {
        cin>>x;
        mp[x]=1;
    }
    ll cur=x;
    while(1)
    {
        if(cur%2==0&&mp.count(cur/2))
            cur/=2;
        else if(mp.count(cur*3))
            cur*=3;
        else //直到没有前一个 此时为第一个数
            break;
    }
    while(1) //从前往后推 乘2 或 除3 
    {
        cout<<cur<< ;
        if(mp.count(cur*2))
            cur*=2;
        else if(cur%3==0&&mp.count(cur/3))
            cur/=3;
        else
            break;
    }
}
View Code

 

Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two

标签:sed   代码   contest   blank   int   没有   color   one   不可   

原文地址:https://www.cnblogs.com/MMMinoz/p/11076212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!