CodeForces1070A Find a Number 图论

Posted reverymoon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

 

以上是关于CodeForces1070A Find a Number 图论的主要内容,如果未能解决你的问题,请参考以下文章

[CF1070A] Find a Number - BFS,记忆化搜索

CodeForces - 1608A Find Array水题

dp转图论——cf1070A好题

Find a car CodeForces - 809C (数位DP)

CodeForces 676D代码 哪里有问题呢?

A - Codeforces Rating