ZRound#1
作者:互联网
题目
- [x] A - Nearest Beautiful Number (easy version) 【1900】
- [ ] B - Nearest Beautiful Number (hard version) 【2100】
- [x] C - Expression Evaluation Error 【2000】
- [ ] D - Rescue Niwen! 【2500】
还想冲一冲 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
标签:10,le,ZRound,Nearest,Number,while,version 来源: https://www.cnblogs.com/sduwh/p/15266588.html