tle求条QAQ
查看原帖
tle求条QAQ
1554758
Theshine_king楼主2025/6/14 21:28
#include <bits/stdc++.h>
#define inf 1 << 30
#define mem(a, b) memset(a, b, sizeof(a))
#define st first
#define ed second
using namespace std;



using ll = long long;
using ult = unordered_set<ll>;
using ust = unordered_set<int>;
using vt = vector<int>;
using pii = pair<int, int>;
using vpi = vector<pii>;
using ll = long long;
using pis = pair<int, string>;
using mis = unordered_map<int, string>;
const int N = 1e6 + 5;
int k, a[] = {0, 3, 0}, vis[N];
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    for(;cin >> k;) {
        vector<string> dis(k + 1, "");
        queue<pis> q;
        int p = 3 % k;
        if(p == 0) dis[0] = "3";
        else {
            dis[p] = "3";
            q.push({p, "3"});
        }
        string ans = "";
        while(!q.empty()) {
            int u = q.front().st;
            string s = q.front().ed;
            q.pop();
            //for(int i = 0 ;i < k; i++) cerr << dis[k] << ' ';
            if(u == 0) {ans = s; break;}
            //if(dis[u] < s) continue;
            //if(s != dis[u]) continue;
            if(s.back() == '3') {
                int nxt = (u * 10 + 3) % k;
                string nxts = s + "3";
                if(nxts > dis[nxt]) {
                    dis[nxt] = nxts;
                    q.push({nxt, nxts});
                }  
            }
            int nxt = (u * 10 + 0) % k;
            string nxts = s + "0";
            if(nxts > dis[nxt]) {
                dis[nxt] = nxts;
                q.push({nxt, nxts});
            }
        }
        int cnt0 = 0, cnt3 = 0;
        //cerr << ans << endl;
        for(char c : ans) {
            cnt0 += (c == '0');
            cnt3 += (c == '3');
        }
        cout << ans.size() << ' ' << cnt3 << ' ' << cnt0 << endl;
    }
    return 0;
}
2025/6/14 21:28
加载中...