ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【刷题】【cf】C. Division by Two and Permutation

2022-01-21 13:01:11  阅读:155  来源: 互联网

标签:Division cnt int printf Two Permutation fail include getchar


n个数,每个数可以/2若干次,最后转换为1-n,说明每个数和最后的目标一对一

一个数一开始大于n,则必须要操作至小于等于n,然后存到cnt[i]

按照n->1的顺序看,如果cnt[i]==0,则必没有数可以转化为i

如果cnt[i]>1,则只需要一个转化为cnt[i],剩下的所有已经转化为i的数,继续操作至i/2

#include<cstdio>
#include<cstdlib>
#include<vector>
#include<cmath>
using namespace std;
inline int read()
{
    int x=0;char c=getchar();
    while(c<'0' || c>'9' ) c=getchar();
    while(c>='0'&&c<='9' ) x=(x<<3)+(x<<1)+c-'0',c=getchar();
    return x;
}

int T,n;
const int N=60;
int cnt[N];
 
int main()
{
    T=read();
    while(T--)
    {
        n=read();
        for(int i=1;i<=n;i++) cnt[i]=0;
        for(int i=1;i<=n;i++)
        {
            int x=read();
            while(x>n ) x>>=1;
            cnt[x]++;
        }
        
        bool fail=false;
        for(int i=n;i>0 && !fail;i--)
        {
            if(!cnt[i] ) 
            {
                //printf(" %d %d\n",n,i);
                fail=true;
            }
            if(cnt[i]>1 ) cnt[i>>1]+=cnt[i]-1;
        }
        
        if(!fail ) printf("YES\n");
        else printf("NO\n");
    }
        
    return 0;
}
View Code

 

标签:Division,cnt,int,printf,Two,Permutation,fail,include,getchar
来源: https://www.cnblogs.com/xwww666666/p/15829829.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有