• CodeForces1070A Find a Number 图论


    令状态$f(i, j)$表示模$d$为$i$,和为$j$时的最小数

    可以通过$bfs$来转移

    然而就没了...

    复杂度$O(10ds)$

    #include <queue>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    namespace remoon {
        #define ri register int
        #define ll long long
        #define pii pair<int, int>
        #define mp make_pair
        #define pb push_back
        #define fi first
        #define se second
        #define tpr template <typename ra>
        #define rep(iu, st, ed) for(ri iu = st; iu <= ed; iu ++)
        #define drep(iu, ed, st) for(ri iu = ed; iu >= st; iu --)    
        #define gc getchar
        inline int read() {
            int p = 0, w = 1; char c = gc();
            while(c > '9' || c < '0') { if(c == '-') w = -1; c = gc(); }
            while(c >= '0' && c <= '9') p = p * 10 + c - '0', c = gc();
            return p * w;
        }
    }
    using namespace std;
    using namespace remoon;
    #define sid 525
    #define pid 5205
    
    int d, s;
    struct node {
        int d, s, di;
        node() {}
        node(int a, int b, int c) : d(a), s(b), di(c) {}
    };
    queue <pii> q;
    
    bool vis[sid][pid];
    node pre[sid][pid];
    
    void bfs() {
        vis[0][0] = 1;
        q.push(mp(0, 0));
        while(!q.empty()) {
            pii p = q.front(); q.pop();
            rep(i, 0, 9) {
                int nd = (p.fi * 10 + i) % d;
                int ns = p.se + i;
                if(ns > s) break;
                if(!vis[nd][ns]) {
                    vis[nd][ns] = 1;
                    q.push(mp(nd, ns));
                    pre[nd][ns] = node(p.fi, p.se, i + '0');
                }
            }
        }
    }
    
    inline void dfs(int nd, int ns) {
        if(pre[nd][ns].di != 0) 
        dfs(pre[nd][ns].d, pre[nd][ns].s);
        if(pre[nd][ns].di != 0) 
        printf("%c", pre[nd][ns].di);
    }
    
    int main() {
        d = read(); s = read();
        bfs();
        if(!vis[0][s]) puts("-1");
        else dfs(0, s);
        return 0;
    }
  • 相关阅读:
    客户端回传事件接口IPostBackEventHandler
    《敏捷无敌》—— 一本非常好看的“IT技术言情小说”
    面向对象之设计
    Zac谈网络编辑需要注意的SEO技巧
    面向对象之领悟
    《网络营销实战密码》推荐
    设计模式建造者模式(builder)
    设计模式工厂方法(FactoryMethod)
    struts1.x与struts2的比较表
    设计模式原型模式(ProtoType)
  • 原文地址:https://www.cnblogs.com/reverymoon/p/9844837.html
Copyright © 2020-2023  润新知