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


    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
  • 相关阅读:
    端模板引擎
    Orcale Function Sequence
    OData 集成
    validate[.unobtrusive]和Bootstrap实现tooltip错误提示
    Django
    Web Api 控制器
    HelloWorld和数据绑定
    动态Web Api层
    用户管理
    Docker
  • 原文地址:https://www.cnblogs.com/xwww666666/p/15829829.html
Copyright © 2020-2023  润新知