QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#178180 | #2337. Azulejos | PetroTarnavskyi# | WA | 5ms | 40708kb | C++17 | 1.7kb | 2023-09-13 19:10:03 | 2023-09-13 19:10:03 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define RFOR(i, b, a) for (int i = (b) - 1; i >= (a); i--)
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second
typedef unsigned long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef double db;
const int MAX = 1'000'447;
LL h[MAX];
LL pw[MAX + 47];
int c[MAX];
unordered_set<int> len;
unordered_map<LL, int> m;
VI g[MAX];
vector<int> st;
LL hq[MAX];
LL p = 47;
void dfs(int v)
{
if (v != 0)
{
int x = c[v] - 'A' + 1;
h[v] = h[st.back()] * p + x;
st.PB(v);
for (auto l : len)
{
if (l < SZ(st))
{
int i = SZ(st) - l - 1;
LL H = pw[MAX];
LL hash = (h[v] - h[st[i]] * pw[l]) * H;
if (m.count(hash))
m[hash]++;
}
}
}
else
{
h[v] = 0;
st.PB(v);
}
for (auto to : g[v])
dfs(to);
st.pop_back();
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout << fixed << setprecision(15);
pw[0] = 1;
FOR (i, 1, MAX + 7)
{
pw[i] = pw[i - 1] * p;
}
int n, k;
cin >> n >> k;
//len.reserve(474747);
vector<string> v(k);
FOR (i, 0, n)
{
char ch;
int par;
cin >> ch >> par;
c[i + 1] = ch;
g[par].PB(i + 1);
}
//m.reserve(2'474'747);
FOR (i, 0, k)
{
cin >> v[i];
len.insert(SZ(v[i]));
LL hs = 0;
FOR (j, 0, SZ(v[i]))
{
int x = v[i][j] - 'A' + 1;
hs = hs + x * pw[j];
}
hs = hs * pw[MAX];
m[hs] = 0;
hq[i] = hs;
}
dfs(0);
FOR (i, 0, k)
{
cout << m[hq[i]] << '\n';
}
cerr << double(clock()) / CLOCKS_PER_SEC << '\n';
return 0;
}
Details
Test #1:
score: 0
Wrong Answer
time: 5ms
memory: 40708kb