ZRound#1

题目

还想冲一冲 2500 分的题, 有点做梦了, 2100 分的题都没有 a 出来, 最近的训练还是要1900 - 2200 为主

做 C 的时候心态崩了, 写的越来越乱, 其实 C 不难, 只要稳住心态好好想一想实现就可以比较快的 A 掉

A. Nearest Beautiful Number(easy version)

Tag: 1900 暴力

题意

给一个整数 \(n\) , 求大于等于 \(n\) 的第一个 \(k-beautiful\) 数, 指数字中数位总数小于等于 \(k\)

如 122221,11111,770 都是 2-beautiful

Easy-version : \(1 \le k \le 2\)

Hard-version: \(1\le k \le 10\)

对于 easy-version ,直接暴力求出所有数, 然后 lower_bound 即可

B. Nearest Beautiful Number (hard version)

补题

大致有两种解法, 一种是贪心的解法, 只能说是妙哇, 找到 k + 1 个不同数字的前缀, 然后 ++, 不停这样操作即可

#include<bits/stdc++.h>
using namespace std;

int count(int v){
    int res = 0;
    while(v){
        res |= (1 << (v % 10));
        v /= 10;
    }
    return __builtin_popcount(res);
}
int T, n, k;
int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin >> T;
    while(T--){
        cin >> n >> k;
        while(count(n) > k){
            int f = n, t = 1;
            while(count(f / 10) > k){
                f /= 10;
                t *= 10;
            }
            f++; n = f * t;
        }
        cout << n << '\n';
    }
    
}

还有一种是数位 dp + 二分的做法, 先 m 住, 后边刷 dp 后再来补

C. Expression Evaluation Error

Tag: 2000 贪心

题意

给 \(s\) 和 \(n\) , 有长度为 \(n\) 的数组 \(A\) , 满足 \(\sum_{i=1}^n A_i = s\) , 现在用 11-base 进制来解释 \(A\)​ ,要使得其在 11-base 的意义下和最大, 给出任意符合要求的构造, \(1 \le A_i\)

思路

对于向上的进制转换,贪最高位即可。

D. Rescue Niwen

上一篇:Learn OpenGL 笔记2.6 - Textures


下一篇:Windows11上手体验