zoukankan      html  css  js  c++  java
  • $CF EDU 83$

    (CF EDU 83)

    (C)

    给定一个长为 (n) 且初始值为 (0) 的序列 (v) 和一个长度为 (n) 的序列 (a)
    给定 (k) ,每次操作,要么将一个 (v[pos]) 增大 (k^{step}),要么跳过当前操作, (step)(0) 开始计数,每一回合结束 (step) 自增。
    是否可以使得 (v) 变成 (a)

    考虑转化为 (k) 进制求解。
    对于每一个 (a[i]) ,其 (k) 进制表示下的每一个 (digit) 必须为 (1) ,同时,将所有的 (a[i]) 拆位,数位编号必须没有重复。

    int t, n, k;
    int b[100];
    
    bool check(LL x)
    {
        int i = 0;//digit 编号
        while(x) {
            if(x % k == 1 && b[i]) return 0;
            if(x % k > 1) return 0;
            if(x % k == 1) b[i] = 1;
            x /= k;
            i++;
        }
        return 1;
    }
    int main()
    {
        scanf("%d", &t);
        while(t--){
            memset(b, 0, sizeof(b));
            scanf("%d %d", &n, &k);
            int f = 0;
            LL x; 
            for(int i = 1; i <= n; ++i){
                scanf("%lld", &x);
                if(!check(x)) f = 1;
            }
            if(f) puts("NO");
            else puts("YES");
        }
        return 0;
    }
    
  • 相关阅读:
    分布式事务
    幂等性
    方法重载
    伊人之乡
    恋桃诗
    C#使用litJson解析Json(二)
    C#使用litJson解析Json(一)
    用浏览器调试Html
    Oracle之触发器(Trigger)
    Oracle之视图(View)
  • 原文地址:https://www.cnblogs.com/ChenyangXu/p/12453095.html
Copyright © 2011-2022 走看看