首页 > 其他分享 >B. Equalize by Divide - 贪心+思维+构造+数学+排序

B. Equalize by Divide - 贪心+思维+构造+数学+排序

时间:2023-04-26 13:57:07浏览次数:41  
标签:pii 排序 Equalize Divide int cin 数组 贪心 first

题意:

  给定一个数组,可以进行任意多次以下操作:

  1.选择第i和第j个数。

  2.使a[i]=a[i]/a[j](向上取整)。

  不可以插入或者删减数组元素,求多少次使数组元素都相同,输出次数以及每次操作的两个下标i,j;如果无法实现输出-1.

分析:

  数组中存在1一定无法实现,或者数组元素都相等直接输出0。

可以将数组排序,使数组中每一个大于最小值的数a[i]都每次与最小的数a[0]进行操作直到a[i]<=a[0],如果数组元素仍然不相同则继续重复以上步骤。

代码:

#include <bits/stdc++.h>

#define endl '\n'

using namespace std;

typedef pair<int,int> pii;
typedef long long ll;

const int N=110;

pii a[N];

void solve()
{
    int t;
    cin>>t;
    while(t--)
    {
        vector<pii> ans;
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            int x;
            cin>>x;
            a[i]={x,i+1};
        }
        sort(a,a+n);
        if(a[0].first==a[n-1].first)
        {
            cout<<0<<'\n';
            continue;
        }
        if(a[0].first==1)
        {
            cout<<-1<<'\n';
            continue;
        }
        while(1)
        {
            int flag=0;
            for(int i=1;i<n;i++)
            {
                if(a[i].first>a[0].first)
                {
                    flag=1;
                    while(a[i].first>a[0].first)
                    {
                        if(a[i].first%a[0].first==0) a[i].first/=a[0].first;
                        else a[i].first=a[i].first/a[0].first+1;
                        ans.push_back({a[i].second,a[0].second});
                    }
                }
            }
            if(flag==0) break;
            else sort(a,a+n);
        }
        cout<<ans.size()<<'\n';
        for(int i=0;i<ans.size();i++) cout<<ans[i].first<<' '<<ans[i].second<<'\n';
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    solve();
}

 

标签:pii,排序,Equalize,Divide,int,cin,数组,贪心,first
From: https://www.cnblogs.com/yaowww/p/17355673.html

相关文章

  • 贪心(区间选点)
    #include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intn;structRange{intl;intr;booloperator<(constRange&w)const{returnr<w.r;}}range[N];intmain(){intn;cin>>n;for(inti=0;i<......
  • 2023-04-24 算法面试中常见的贪心算法问题
    贪心算法1贪心选择例题455.饼干分配假设你想给小朋友们饼干。每个小朋友最多能够给一块儿饼干。每个小朋友都有一个“贪心指数”,称为g(i),g(i)表示的是这名小朋友需要的饼干大小的最小值。同时,每个饼干都有一个大小值s(i)。如果s(j)>=g(i),我们将饼干j分给小朋友i后,小朋友就会......
  • XI Samara Regional Intercollegiate Programming Contest Problem K. Video Reviews
    Thestudio«LodkaGaming»isengagedinadvertisingoftheirnewgame«.C.O.N.T.E.S.T:UnexpectedBehaviour».Thestudio’smarketerisplanningtocommunicatewithnvideobloggersonebyone(inthepredeterminedorder,startingfromthe1-standend......
  • POJ - 3614 贪心
    Toavoidunsightlyburnswhiletanning,eachoftheC(1≤C≤2500)cowsmustcoverherhidewithsunscreenwhenthey’reatthebeach.CowihasaminimumandmaximumSPFrating(1≤minSPFi≤1,000;minSPFi≤maxSPFi≤1,000)thatwillwork.Ifthe......
  • 4.24 贪心法学习笔记
    多写题解多交流才能学好oi。在这里贴了代码,为了看上去完整一些。 大概是一些自己学习的记录罢。贪心不算客观意义上的算法,感觉还不算一种策略机制。我认为更像一种思路,其内涵就是择优,解题时就去想怎样才能更优。根据最优的思路能去做很多,如果说贪心是一个题的正解的话太抽......
  • codeforces 225B B. Well-known Numbers(数论+二分+贪心+构造)
    题目链接:codeforces225B题目大意:定义f(k,n)为类似菲波那契数推导,只不过变为前k项的和,然后给出一个数s,利用k-菲波那契数构造出一个不重复的集合的元素和为s,集合的规模大于1题目分析:首先因为菲波那契数的增长速度快的吓人,所以给的数据范围109很快就能达到,我们得到O(n)的构造出所有的......
  • Codeforces Round 689 (Div. 2, based on Zed Code Competition)D.Divide and Summari
    题意:我们给定包含n个正整数的数组,我们可以对这个数组执行一些操作之后,可以让数组内元素的和成为我们想要的数。我们对数组的执行操作一共分为三个步骤,第一个步骤是我们首先计算出数组的中间值mid。这里mid的定义不是中位数也不是均值,而是最大值和最小值的均值。也就是mid=(min......
  • UVA Children’s Game(贪心)
    Description4thIIUCInter-University ProgrammingContest,2005AChildren’sGameInput:standardinputOutput:standardoutputProblemsetter: Md. KamruzzamanTherearelotsofnumbergamesforchildren.Thesegamesareprettyeasytoplaybutnotsoeasyt......
  • B. Tree Tag(贪心+树的最长直径)
    题目B.TreeTag题意思路因为这是一颗树,所以不管怎么追逐,我们都可以理解为在同一条路上追逐(去掉我们不走的路,就是一个线段)首先,如果da>db,显然能追上,进一步,da==db时,因为路径的长度是有限的,也显然可以追上因为树上任意两点的最短路径是固定的,所以a点可以一直朝着b追,而b是......
  • Permutation Restoration (贪心,排序处理) (范围左端点排序,然后取最小点放)
     思路:对于每一个bi都会有有一个范围,然后贪心的做,具体的先对这个范围按照左端点排序,然后贪心的去最小的值去放 ......