算法入门?-Sramoc问题-字符串如何定义?

Sramoc问题

https://ac.nowcoder.com/acm/problem/235247

题意

  • 给定k,m,构造一个由0~k-1这些数字组成的数,使得k整除m

思路

  • 利用同余,不断广搜,一个余数出现后,后面再出现相同余数就直接跳过
  • 开始要从1~k的每一个值都试一遍
  • 由于位数很多,需要使用字符串来存储数字

AC代码

#include <bits/stdc++.h>

using namespace std;

int k, m;
bool vis[1007];
struct node {
    string num;
    int r;
};
string bfs() {
    queue<node> q;
    for (int i = 1;i < k;i++) {
        string s(1, '0' + i);
        q.push({ s,i % m });
        vis[i % m] = 1;
    }
    while (!q.empty()) {
        node cur = q.front();
        q.pop();
        if (!cur.r) return cur.num;
        for (int i = 0;i < k;i++) {
            string s(1, '0' + i);
            string nnum = cur.num + s;
            int rr = (cur.r * 10 + i) % m;
            if (vis[rr]) continue;
            vis[rr] = 1;
            q.push({ nnum,rr });
        }
    }
    return "null";
}

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> k >> m;
    cout << bfs() << '\n';
    return 0;
}

字符串如何定义

  • 对于该题初始的k个单字符串,可以采用字符串的重复构造法
  • string s(count,char);构建长为count的重复char字符串
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务