首页 > 其他分享 >牛客周赛 Round 66 G

牛客周赛 Round 66 G

时间:2024-11-06 21:57:26浏览次数:1  
标签:dep return int 牛客 state 66 pair using Round

G.小苯的数位MEX

思路

比较模板的数位dp,虽然我不会

代码

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
using piii = pair<int, pii>;
using pll = pair<ll, ll>;
using plll = pair<ll, pll>;
using plii = pair<ll, pii>;
#define fi first
#define se second
const int INF = 0x3f3f3f3f;
const ull mod1 = (1ull << 61) - 1, mod2 = 1e9 + 7;
const ull base1 = 131, base2 = 13331;
// mt19937 rnd(time(0));

const int mod = 998244353;

vector<int> nums;
int mex;
int f[11][1100];  //f[dep][state]到第dep位(从高位到低位),该位之前的状态为state(不包括该位)

//分别为层数  状态  最高位限制  有无前导零
int dfs(int dep, int state, bool limit, bool lead0) {
    if (dep == nums.size()) {
        if (lead0)
            return mex == 1 ? 1 : 0;
        for (int i = 0; i < mex; i++) {
            if ((state >> i & 1) == 0)
                return limit ? 0 : f[dep][state] = 0;
        }
        return limit ? 1 : f[dep][state] = 1;
    }
    if (!lead0 && !limit && f[dep][state] != -1) //不加lead0也行
        return f[dep][state];
    int up = limit ? nums[dep] : 9;  //根据有无限制确定第dep位枚举上限
    int res = 0;
    for (int i = 0; i <= up; i++) {
        int fst = state | (1 << i);
        if (lead0 && i == 0) //如果有前导零,则无法传递
            fst = 0;
        if (i == mex && (lead0 & i == 0) == 0) //如果i等于mex(没前导零的情况),也是不成立的
            continue;
        res += dfs(dep + 1, fst, limit && i == up, lead0 && i == 0);
    }
    if (!limit && !lead0)   //不加lead0也行
        f[dep][state] = res;
    return res;
}

int get(int x) {
    memset(f, -1, sizeof f);
    nums.clear();
    if (!x) { //x为零无法进入while循环,特判
        return mex == 1 ? mex : 0;
    }
    while (x) {
        nums.push_back(x % 10);
        x /= 10;
    }
    reverse(nums.begin(), nums.end());
    return dfs(0, 0, 1, 1);
}

void solve() {
    int a, b;
    cin >> a >> b;
    b += a;
    for (int i = 10; i >= 0; i--) {
        mex = i;
        int ans = get(b) - get(a - 1);
        if (ans) {
            cout << i << " " << ans << endl;
            return;
        }
    }
}

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int _ = 1;
    cin >> _;
    while (_--) {
        solve();
    }
    return 0;
}

标签:dep,return,int,牛客,state,66,pair,using,Round
From: https://www.cnblogs.com/mgnisme/p/18531146

相关文章

  • 基于PLC的嵌入式软PLC开发及IEC6631-3标准eCLR内核运行环境研究【附数据】
    ......
  • GJ Round (2024.10) Round 8~21
    前言:点此返回GJRound目录Round8(10.5)A给定\(n\)个区间,每个区间\([l_i,r_i]\),最大化选取区间对数,使得每对区间\([l_i,r_i],[l_j,r_j]\)满足\([l_i,r_i]\cap[l_j,r_j]=\varnothing\)先按\(l_i\)从小到大排序,再按\(r_i\)从小到大排序考虑贪心,维护两个......
  • GJ Round (2024.11) Round 22~?
    前言:点此返回GJRound目录Round22(11.4)唯一一次快速补完了题AAT_arc077_a[ABC066C]pushpush不懂这原题标号咋这么奇怪给你一个序列\(a_1\dotsa_n\),按照如下规则构造新序列:将\(a_i\)插入序列末尾将整个序列反转模拟/打表找规律:当\(n\)为奇数时......
  • Educational Codeforces Round 161 (Rated for Div. 2) - VP记录
    Preface先被A题硬控\(20\)分钟,有点不爽。又看到E题AC的人比D题多而去嗑E题去了,结果D题反而是我更能做的。将问题排序:根据你所需付出的努力,将能够最快解决的问题排在前面。(答题的次序为:以前做过的,容易的,不熟悉的,难的)——李博杰《骗分导论》\(\rmP_{114}\)所以......
  • 牛客小白月赛103
    A冰冰的正多边形链接:https://ac.nowcoder.com/acm/contest/93218/A思路:能拼成的正多边形中周长最小的正多边形周长,即先sort,后找第一个出现的正三边形代码:#include<bits/stdc++.h>usingnamespacestd;inta[200];intmain(){ intt; cin>>t; while(t--){ intn; ci......
  • P6667 [清华集训2016] 如何优雅地求和 题解
    一道非常有启发性的题目。思路考虑对于一个给出点值的多项式函数如何处理。我们发现,对于一个\(m\)次多项式\(f(x)\),由于\(\binom{x}{i}\)为\(i\)次多项式,所以说我们必定可以把一个多项式函数写成如下模样:\[F(k)=\sum_{i=0}^m\binom{k}{i}f_i\]可以看出,\(f_i\)实际上......
  • SpringBoot网文论坛管理系统5w669(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着网络文学的兴起和读者群体的扩大,网文论坛成为作者与读者交流的重要平台。然而,现有的网文论坛普遍存在管理不便、信息杂乱等......
  • 每日OJ题_牛客_相差不超过k的最多数_滑动窗口_C++_Java
    目录牛客_相差不超过k的最多数_滑动窗口题目解析C++代码Java代码牛客_相差不超过k的最多数_滑动窗口相差不超过k的最多数_牛客题霸_牛客网(nowcoder.com)描述:        给定一个数组,选择一些数,要求选择的数中任意两数差的绝对值不超过 k 。问最多能选择多少......
  • E-小H学历史(牛客练习赛131)
    题意:现有n座城池,有n-1条道路将这些城池连成树,每座城池可以被两个国家占领,或者是无主,每个国家可以占领和自己城池相连的城池。问两个国家总城池树差最小值是多少。分析:bfs跑A可以占据的所有城池,遇到B停下,假设可以占据a个城池,dfs跑B可以占据的所有城池,遇到A停下,假设可以占据b个......
  • 牛客软件开发专项练习-Day6
    1.若一个具有N个结点,M条边的无向图构成一个森林,(N>M),则该森林必有多少棵树(N-M)2.某网络的IP地址空间为192.168.5.0/24 , 采用定长子网划分,子网掩码为255.255.255.248,则该网络的最大子网个数 、每个子网内的最大可分配地址个数(32,6)解释:由192.168.5.0/24可知子网掩码是255.......