QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#235149#669. Hash8BQube#ML 0ms0kbC++201.7kb2023-11-02 15:18:282023-11-02 15:18:29

Judging History

This is the latest submission verdict.

  • [2023-11-02 15:18:29]
  • Judged
  • Verdict: ML
  • Time: 0ms
  • Memory: 0kb
  • [2023-11-02 15:18:28]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define X first
#define Y second
#define pb push_back
#define ALL(v) v.begin(), v.end()
#define SZ(a) ((int)a.size())


ll w[100];
ll a, b;

ll sum = 0;
const int C = 1000000;
vector<pair<ll, string>> v, v0;
bitset<1'000'000'000> bst;
const string _s = "verylongstringtostartwith";
string s;

void gen(int i, int bs) {
    if (i == 25) {
        v.pb({sum, s});
        return;
    }
    while (SZ(v) < C) {
        if (s[i] > 'z') {
            s[i] = 'a'; 
            return;
        }
        sum = (sum + (s[i] - 'a' + 1) * w[i + bs]) % b;
        gen(i + 1, bs);
        sum = (sum - (s[i] - 'a' + 1) * w[i + bs] % b + b) % b;
        ++s[i];
    }
}

ll cal(string t) {
    ll h = 0;
    for (char c : t)
        h = (h * a + (c - 'a' + 1)) % b;
    return h;
}

int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    assert(SZ(_s) == 25);
    cin >> a >> b;
    w[49] = 1;
    for (int i = 48; i >= 0; i--)
        w[i] = w[i + 1] * a % b;

    s = _s;
    v.clear();
    sum = 0;
    
    gen(0, 0);
    v0 = v;
    sort(ALL(v0));
    for (auto &p : v0)
        bst[p.X] = 1; 

    s = _s;
    v.clear();
    sum = 0;
    gen(0, 25);

    vector<string> ans;
    for (auto &p : v) {
        if (SZ(ans) == 100)
            break;
        ll need = (-p.X + b) % b;        
        if (bst[need]) {
            int i = lower_bound(ALL(v0), pair<ll, string>(need, "")) - v0.begin(); 
            while (i < SZ(v0) && v0[i].X == need && SZ(ans) < 100)
                ans.pb(v0[i].Y + p.Y), i++;
        }
    }
    assert(SZ(ans) == 100);

    for (auto x : ans) {
        assert(cal(x) == 0);
        cout << x << endl;
    }



    
}

詳細信息

Test #1:

score: 0
Memory Limit Exceeded

input:

215465827 841597626

output:

verylongstringtostarvfojcverylongstringtostartwkam
verylongstringtostaruahuiverylongstringtostartwmei
verylongstringtostarvmtpgverylongstringtostartwnfy
verylongstringtostarudrghverylongstringtostartwnna
verylongstringtostarvwcbsverylongstringtostartwoxo
verylongstringtostarvjpmbverylongstringtostar...

result: