This documentation is automatically generated by competitive-verifier/competitive-verifier
// @brief Wildcard Pattern Matching
#define PROBLEM "https://judge.yosupo.jp/problem/wildcard_pattern_matching"
#pragma GCC optimize("O3,unroll-loops")
#define CP_ALGO_CHECKPOINT
#pragma GCC target("avx2")
#include <bits/stdc++.h>
#include "cp-algo/math/cvector.hpp"
#include "cp-algo/random/rng.hpp"
using namespace std;
using namespace cp_algo::math;
using fft::ftype;
using fft::point;
using fft::vftype;
using fft::cvector;
void semicorr(auto &a, auto &b) {
a.fft();
b.fft();
a.dot(b);
a.ifft();
}
auto is_integer(auto a) {
static const ftype eps = 1e-9;
return cp_algo::abs(a - cp_algo::round(a)) < eps;
}
cp_algo::big_string matches(cp_algo::big_string const& A, cp_algo::big_string const& B, char wild = '*') {
static ftype project[2][128];
static bool init = false;
if(!init) {
init = true;
std::uniform_real_distribution<> dis(.5, 2.);
for(int i = 0; i < 128; i++) {
ftype x = dis(cp_algo::random::gen);
project[0][i] = x;
project[1][i] = 1. / x;
}
}
project[0][(int)wild] = project[1][(int)wild] = 0;
cp_algo::big_vector<cvector> P;
P.emplace_back((size(A) + 1) / 2);
P.emplace_back((size(A) + 1) / 2);
auto N = P[0].size();
auto assign = [&](int z) {
return [&, z](auto ic) {
auto [i, c] = ic;
if(i < (int)N) {
real(P[z].r[i / fft::flen])[i % fft::flen] = project[z][(int)c];
} else {
i -= N;
imag(P[z].r[i / fft::flen])[i % fft::flen] = project[z][(int)c];
}
};
};
ranges::for_each(A | views::enumerate, assign(0));
ranges::for_each(B | views::reverse | views::enumerate, assign(1));
cp_algo::checkpoint("cvector fill");
semicorr(P[0], P[1]);
cp_algo::big_string ans(2 * size(P[0]), '0');
auto start = (ssize(B) - 1) / fft::flen * fft::flen;
for(auto j = start; j < size(ans); j += fft::flen) {
decltype(is_integer(real(P[0].at(j)))) check;
if(j < N) {
check = is_integer(real(P[0].at(j)));
} else {
check = is_integer(imag(P[0].at(j - N)));
}
for(int z = 0; z < 4; z++) {
ans[j + z] ^= (bool)check[z];
}
}
cp_algo::checkpoint("fill answer");
return ans.substr(size(B) - 1, size(A) - size(B) + 1);
}
void solve() {
cp_algo::big_string a, b;
cin >> a >> b;
cp_algo::checkpoint("input");
cout << matches(a, b) << "\n";
cp_algo::checkpoint("output");
cp_algo::checkpoint<true>("done");
}
signed main() {
//freopen("input.txt", "r", stdin);
ios::sync_with_stdio(0);
cin.tie(0);
int t = 1;
//cin >> t;
while(t--) {
solve();
}
}
Traceback (most recent call last):
File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj_resolve/resolver.py", line 181, in resolve
bundled_code = language.bundle(path, basedir=basedir)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus.py", line 252, in bundle
bundler.update(path)
File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus_bundle.py", line 327, in update
assert len(lines) == len(uncommented_lines)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
| Env | Name | Status | Elapsed | Memory |
|---|---|---|---|---|
| g++ | alternating_00 |
|
12 ms | 13 MB |
| g++ | alternating_01 |
|
13 ms | 13 MB |
| g++ | alternating_02 |
|
5 ms | 5 MB |
| g++ | alternating_03 |
|
11 ms | 13 MB |
| g++ | alternating_04 |
|
11 ms | 13 MB |
| g++ | example_00 |
|
4 ms | 4 MB |
| g++ | hack_998244353_00 |
|
13 ms | 14 MB |
| g++ | hack_998244353_01 |
|
12 ms | 14 MB |
| g++ | hack_998244353_02 |
|
12 ms | 14 MB |
| g++ | random_00 |
|
12 ms | 13 MB |
| g++ | random_01 |
|
12 ms | 13 MB |
| g++ | random_02 |
|
5 ms | 5 MB |
| g++ | random_03 |
|
11 ms | 13 MB |
| g++ | random_04 |
|
11 ms | 13 MB |
| g++ | random_ab_00 |
|
12 ms | 13 MB |
| g++ | random_ab_01 |
|
13 ms | 13 MB |
| g++ | random_ab_02 |
|
5 ms | 5 MB |
| g++ | random_ab_03 |
|
11 ms | 13 MB |
| g++ | random_ab_04 |
|
11 ms | 13 MB |