QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#720336 | #9406. Triangle | DaiRuiChen007 | TL | 260ms | 43508kb | C++17 | 7.2kb | 2024-11-07 11:57:22 | 2024-11-07 11:57:22 |
Judging History
answer
#include <bits/stdc++.h>
using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;
struct SuffixArray {
int n;
std::vector<int> sa, rk, lc;
SuffixArray(const std::vector<int> &s) {
n = s.size();
sa.resize(n);
lc.resize(n - 1);
rk.resize(n);
std::iota(sa.begin(), sa.end(), 0);
std::sort(sa.begin(), sa.end(),
[&](int a, int b) {
return s[a] < s[b];
});
rk[sa[0]] = 0;
for (int i = 1; i < n; i++) {
rk[sa[i]] = rk[sa[i - 1]] + (s[sa[i]] != s[sa[i - 1]]);
}
int k = 1;
std::vector<int> tmp, cnt(n);
tmp.reserve(n);
while (rk[sa[n - 1]] < n - 1) {
tmp.clear();
for (int i = 0; i < k; i++) {
tmp.push_back(n - k + i);
}
for (auto i : sa) {
if (i >= k) {
tmp.push_back(i - k);
}
}
std::fill(cnt.begin(), cnt.end(), 0);
for (int i = 0; i < n; i++) {
cnt[rk[i]]++;
}
for (int i = 1; i < n; i++) {
cnt[i] += cnt[i - 1];
}
for (int i = n - 1; i >= 0; i--) {
sa[--cnt[rk[tmp[i]]]] = tmp[i];
}
std::swap(rk, tmp);
rk[sa[0]] = 0;
for (int i = 1; i < n; i++) {
rk[sa[i]] = rk[sa[i - 1]] + (tmp[sa[i - 1]] < tmp[sa[i]] || sa[i - 1] + k == n || tmp[sa[i - 1] + k] < tmp[sa[i] + k]);
}
k *= 2;
}
for (int i = 0, j = 0; i < n; i++) {
if (rk[i] == 0) {
j = 0;
} else {
for (j -= (j > 0); i + j < n && sa[rk[i] - 1] + j < n && s[i + j] == s[sa[rk[i] - 1] + j]; j++)
;
lc[rk[i] - 1] = j;
}
}
}
};
constexpr int N = 1E6 + 2;
int trie[N][26];
int tot;
int num;
int id[N];
int newNode() {
int x = ++tot;
std::fill(trie[x], trie[x] + 26, 0);
id[x] = -1;
return x;
}
int add(const std::string &s) {
int p = 1;
for (auto c : s) {
int i = c - 'a';
int &q = trie[p][i];
if (!q) {
q = newNode();
}
p = q;
}
if (id[p] == -1) {
id[p] = num++;
}
return id[p];
}
template <typename T>
struct Fenwick {
int n;
std::vector<T> a;
Fenwick(int n_ = 0) {
init(n_);
}
void init(int n_) {
n = n_;
a.assign(n, T{});
}
void add(int x, const T &v) {
for (int i = x + 1; i <= n; i += i & -i) {
a[i - 1] = a[i - 1] + v;
}
}
T sum(int x) {
T ans{};
for (int i = x; i > 0; i -= i & -i) {
ans = ans + a[i - 1];
}
return ans;
}
T rangeSum(int l, int r) {
return sum(r) - sum(l);
}
int select(const T &k) {
int x = 0;
T cur{};
for (int i = 1 << std::__lg(n); i; i /= 2) {
if (x + i <= n && cur + a[x + i - 1] <= k) {
x += i;
cur = cur + a[x - 1];
}
}
return x;
}
};
std::vector<int> Z(std::string s) {
int n = s.size();
std::vector<int> z(n + 1);
z[0] = n;
for (int i = 1, j = 1; i < n; i++) {
z[i] = std::max(0, std::min(j + z[j] - i, z[i - j]));
while (i + z[i] < n && s[z[i]] == s[i + z[i]]) {
z[i]++;
}
if (i + z[i] > j + z[j]) {
j = i;
}
}
return z;
}
void solve() {
int n;
std::cin >> n;
tot = 0;
num = 0;
newNode();
std::vector<std::string> s;
std::vector<int> st;
std::vector<int> cnt;
std::vector<int> T;
for (int i = 0; i < n; i++) {
std::string a;
std::cin >> a;
int p = add(a);
if (p >= s.size()) {
st.push_back(T.size());
for (auto c : a) {
T.push_back(c);
}
T.push_back(-N + a.size());
s.push_back(a);
cnt.push_back(1);
} else {
cnt[p]++;
}
}
n = s.size();
std::vector<std::vector<int>> z(n);
for (int i = 0; i < n; i++) {
z[i] = Z(s[i]);
}
auto cmp = [&](int i, int j) -> int {
int c = 1;
if (s[i].size() > s[j].size()) {
c *= -1;
std::swap(i, j);
}
int t = z[j][s[i].size()];
if (s[i].size() + t < s[j].size()) {
return s[j][t] < s[j][t + s[i].size()] ? -c : c;
}
t = z[j][s[j].size() - s[i].size()];
if (t == s[i].size()) {
return 0;
}
return s[j][s[j].size() - s[i].size() + t] < s[i][t] ? -c : c;
};
std::vector<int> ord(n);
std::iota(ord.begin(), ord.end(), 0);
std::sort(ord.begin(), ord.end(),
[&](int i, int j) {
auto &a = s[i], &b = s[j];
return a+b<b+a;
});
std::vector<int> w(n);
for (int i = 0; i < n; i++) {
w[ord[i]] = i;
}
SuffixArray sa(T);
i64 ans = 0;
std::vector<std::array<i64, 4>> qry;
for (int x = 0; x < n; x++) {
int p = 1;
for (int j = 0; j < s[x].size(); j++) {
int c = s[x][j] - 'a';
p = trie[p][c];
if (!p) {
break;
}
if (id[p] != -1) {
int y = id[p];
int u = w[y];
int l = sa.rk[st[x] + j + 1];
int r = sa.rk[st[x]];
if (l > r) {
continue;
}
if (y != x) {
qry.push_back({u, l, r, 1LL * cnt[x] * cnt[y]});
if (l < sa.rk[st[y]] && sa.rk[st[y]] < r) {
ans += 1LL * cnt[x] * cnt[y] * (cnt[y] - 1) / 2;
}
if (w[x] < u && l < sa.rk[st[x]]) {
ans += 1LL * cnt[x] * (cnt[x] - 1) / 2 * cnt[y];
}
} else {
qry.push_back({u, l, r, 1LL * cnt[x] * (cnt[x] - 1) / 2});
ans += 1LL * cnt[x] * (cnt[x] - 1) * (cnt[x] - 2) / 6;
}
}
}
}
std::vector<int> p(n);
std::iota(p.begin(), p.end(), 0);
std::sort(p.begin(), p.end(),
[&](int i, int j) {
return w[i] < w[j];
});
std::sort(qry.begin(), qry.end());
Fenwick<int> fen(T.size());
for (int i = 0; auto [u, l, r, v] : qry) {
while (i < n && w[p[i]] < u) {
int j = p[i];
fen.add(sa.rk[st[j]], cnt[j]);
i++;
}
ans += v * fen.rangeSum(l + 1, r);
}
std::cout << ans << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 5656kb
input:
3 6 cbaa cb cb cbaa ba ba 3 sdcpc sd cpc 1 ccpc
output:
16 0 0
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 5896kb
input:
14 1 lfpbavjsm 2 pdtlkfwn mbd 3 dvqksg dvqksg uhbhpyhj 4 ombwb ombwb ombwb ombwb 5 oztclz oztclz oztclz oztclz kul 6 vco vco vco dtktsqtinm vco vco 7 tb tb kowbsu ygkfphcij tb uvei tb 8 vxxtxssht abnsxbf bydaae bydaae udalyvmcef bydaae bydaae bydaae 9 aaze zvyonw qjfv mmhkef qjfv qjfv qjfv mmhkef qj...
output:
0 0 0 4 10 20 10 20 41 14 63 74 18 11081
result:
ok 14 lines
Test #3:
score: 0
Accepted
time: 1ms
memory: 5940kb
input:
11 10 bppzfsncq bppzfsncq vcqxgcehdx bppzfsncq bppzfsncq muwrcvt w aanwhqmync aanwhqmync bppzfsncq 10 t jkky t z t t z z z t 10 qidkyca uhqubvbo kosyvh gsj gsj gsj duo jrro gsj jrro 10 lhktb lhktb lhktb uohl lhktb r lhktb lhktb wruim lhktb 10 e gqvdmpvxb gqvdmpvxb gqvdmpvxb sttirbhz gqvdmpvxb zdfpm ...
output:
30 60 15 35 20 20 23 12 38 44 8047
result:
ok 11 lines
Test #4:
score: 0
Accepted
time: 3ms
memory: 7904kb
input:
11 100 kalgqjh mdszzwe qxn kalgqjh hy kalgqjh suplvp r kkeoxmx tcoise suplvp suplvp y kalgqjh vrwniyici jmnyrradyq kalgqjh kalgqjh suplvp rkg xzevyk zc suplvp hcupv kalgqjh qakyahjaoi mum pbg u ip kalgqjh kalgqjh jngc ylr suplvp qxn kalgqjh bzwodm e kalgqjh kalgqjh evmm kbymvbccs kalgqjh suplvp kalg...
output:
12478 6722 9220 6668 4934 11233 7950 5470 4525 5743 1586066
result:
ok 11 lines
Test #5:
score: 0
Accepted
time: 0ms
memory: 5880kb
input:
2 1000 t lhijhkxzzx nhfiksblww h xg z dcbmbvyz ois ynwjgfp oqzv qtoinl gr teu kmza hs t mwhewk kjmuneon bekku qheweh szhagft fcwjp bobwnap y oqpole oqzv xeaiyhfeg rjkdidea wmeslege vyyi teomn yvmcnw vnvum tgnl swqqruuvc xxllevp bov dse e b rtbhogkx nzs e bs pppyndgrrv n tzbwqdusn e xeaiyhfeg i agnet...
output:
2430570 1904282
result:
ok 2 lines
Test #6:
score: 0
Accepted
time: 26ms
memory: 14344kb
input:
503 16 yh yh yhc yhc yhcowdfqlwfidnx yhc yhc yh yhcowdfqlwfidn yhcowdfqlwfidnx yh h yh yhcowdfqlwfidnx yhcowdfqlwfidnx yhc 19 nb nbg vpfkllgv nmzqfsuafqtayjjjcidpygz nb nb gutq n omyuvm fgxtfbhuglxyiumi nbghjuti nbg nb fgxt nbghjuti n nb nbg n 7 rtjiwfidoahckhvgoxvvrncqvgerqiuaruiftakvugsgnsw wllcan...
output:
531 485 6 12 4 118 6 3 1635 18 373 20 954 6208 45 12 1124 79 267 2 5778 22 13 1 1 16 630 0 7 16315 0 2155 2308 26 936 109 103 5 0 2492 7 2 114 144 11 158 0 0 101 455 0 12234 78 631 5402 94 66 84 161 4412 5 3 81 22 20 13 52 632 6 137 56 2 3 64521 122 330 0 0 7 0 113 249 8 301 335 1825 110 4 108 50 10...
result:
ok 503 lines
Test #7:
score: 0
Accepted
time: 26ms
memory: 9988kb
input:
503 23 rjyyivdg n n n n n n n nmr n nmrk nm rjyyivdguyiffnvunoxconw n n n o lixclcmwthwkrsi mqluhyypgfkmdvgpzju n nmrk rjy n 15 jotwxwhaqdxmazhslyouztprzlirisvwvduojb jot jotwxw j jotwx jotwx gohg j gdgneodagmdhvvapjh jotwxw xs vurk vurk j xs 7 xrczucnkbemaymvabkkwnn xrczucnkbemaymvabkkwnn xrczucnkb...
output:
855 58 35 0 1 56 2 112 1 8465 242 56 110 23 544 0 3 17 29 11 764 20 9 0 4 77 812 35 4 10 32 437 9 2364 3 2 11 2 421 50 4 107 1 62 1120 3 1 16 3970 1147 1026 8 4 85 9 31 61 16 205 2 2 84 238 1 1 51 4 0 16 61 331 4 16 7 0 7 148 10 13 2 1 37 1 67 0 296 1 0 644 32 2 10 0 5 126 3490 4 0 10 331 1216 7921 ...
result:
ok 503 lines
Test #8:
score: 0
Accepted
time: 25ms
memory: 10312kb
input:
503 5 ljtolmgjndlwoyjjttak mihjdhkyfnafwrpeuiuiurusvsnu ljtolmgjndlwoyjjttak mihjd ljtolmgjndlwoyjjttak 25 lhx lh lhx lh k lh kninp l lhx lhx izeqohkpfuovopebttqaufmmlivd lhx lhx qid lhx lh lhx lhx oklb l lhx lhx lhx lhx l 9 mxeonfwpujrilfigjoiyjkzdmi fezhyrcyqy mx fezh f dmvfbklnkxmnetib dmvfbkln m...
output:
4 1476 27 26 117970 2 105 30 4 737 4 2 19 48 34 434 6 78331 22 23 0 228 56 4 3 305 9 84 132 199 20 3 4057 0 0 20 35 34 48 4 266 14 17 4788 545 28989 0 10 535 84 1 1775 322 11 57 16 15 1331 5 0 10 5 183 8 2 237 10 0 60 20 42 7 10 297 14 210 6254 7 3 0 13 2744 119 47 0 1 68114 17 1 2 1 7 1 2 113 26 0 ...
result:
ok 503 lines
Test #9:
score: 0
Accepted
time: 29ms
memory: 10372kb
input:
503 11 wkeoqqqpvmgdv w w w wkeoqqqpvmgdv sgrwmsfwclpamgq wkeoqqqpvm qkmbyvcxjsh wkeoqqqpvm wke wkeoqqqpvmgdv 7 otd qelodfwrqeprgyvzbcjljx qe qelodfwrqeprgyvzbcjlj qelodfwrqeprgyvzbcjlj qelodfwrqeprgyvzbcjlj c 15 rce rce fwq fwqqfcjrhqot rceft jkdrcehfwhqkupe fwq r jkdr fwq rceft rce fwqqfcjrhqot fwq...
output:
156 17 213 12 20 1 374 4 0 26 26 3 122 30 4005 24 1385 50 84 44 0 112 42 36 19 887 99 5 9 13 2 5029 52 14 84 116 2 10 4 8 141 9287 822 37 5 13 25 1030 0 2 3 35 81 1 0 1 138 0 578 7 30 636 63 22 2118 863 5377 33 34 10 156 336 1 7 7 4 1793 2 124 13 4 2015 7 23 1 4516 3 17 6 35 13336 9 61 3093 0 1 7 22...
result:
ok 503 lines
Test #10:
score: 0
Accepted
time: 142ms
memory: 40708kb
input:
1003 3 mpfowyd mpfowydrivrkjiarwcxwbfqvnktlzcfolbbsgelvcnzeqy hytzojmfeiwtpquxhneeznbdjjlsptedaorwfsxi 3 nyfcq nyfcqgrmshiwmgcbukozvetdggebkkychamof nyfcqgrmshiwmgcbukozvetdggebkkychamofadozdympuejvhdnpi 8 yoeqyfcjsywowdrlzzybjvtycqvizzomc zci yoeqyfc zcinc yoeqyfcjsywowdrlzzybjvtycqvizzomc y zcinc ...
output:
0 1 26 10 66 403 1 265 1025 16 329 4 1219 1 10 70 30 182 60 5 71 1 20 5343 22328 40667 90 6983 66 10 35 20 250 307 913 98 44 5393 56 280 270 3 3 2229 77 17 774 50 5 21 0 208 8 14 185 35 20 11 465 132 176 10 0 10 1704 13 44 141 0 0 5 10 79 17 213 10 108 0 0 289 10 255 27 493 4 1 24 379 30 9 284 173 2...
result:
ok 1003 lines
Test #11:
score: 0
Accepted
time: 188ms
memory: 40816kb
input:
1003 6 exssl exsslhsuwyemcafatpinzvdeypwjqsnvxlkvmpywgx f exss exs exsslhsuwyemcafatpinzvdeypwjqsnvxlkvmpywgx 7 hzzev hzzevmltbehnvjfhsz hzzevmltbe hzzevmltbehnvjfhszqzobn hzzevmltbehnvjf hm hzzevmltbehnvjfhszqzobn 9 rdx rdxnxdfcyrdpgwzwtqgtu rdx rdxnxdfcyrdpgwzwtqgtu f kpotnxntufvd kpotnxntufvdlmij...
output:
3 19 41 134 107 2 372 0 466 456 20 13 25 339 64 170 1 5 27295 3 1 221 116 11 29 19 1006 16827 16 19863 4 6 5784 3 20 21130 66 1275 100 731 83 3 84 0 32 3 615 207 8 44 245 48 165 18050 128 11 864 21 3 1221 120 51 21 8 247 302 0 1098 0 57 42 20 0 845 1 84 16 4 0 2 836 482 4 12 150 654 1035 142 291 34 ...
result:
ok 1003 lines
Test #12:
score: 0
Accepted
time: 175ms
memory: 43508kb
input:
1003 10 lgbpleleme u u uxpwzhga uxpwzhg u uxpwzhgaadltqqpqkbteylath u uxpwzhgaadltqqpqkbteylath uxpwzhgaadltqqpq 9 aqoxfsmqwpafbocodlpdykesadqgiggw swzjus oim aqoxfsmq aqoxfsmqwpafboc swzju nohnsjbdhljarh swzjusx aqoxf 20 mbdiqaartewavbbwbhftzwxm k mbdiqaartewavbbwbhftzwxm kx kxs kxsqv kx kx kxsqv k...
output:
70 0 290 10 604 1770 2 913 1 165 16 316 4 169 26 3 36 2 1549 2 13 15 21 14 109 34 16 1889 132 1700 1 96 17 436 2 0 6183 4144 0 4 50 4 10 5 4 4 78 10 16 97 16 50204 15871 350 3 865 46 7 0 73 38 46 29 1946 65 22088 7 91 43 310 1806 0 50 4 17 38725 262 50 0 304 141 35 50 0 22760 2973 14 410 1112 20 703...
result:
ok 1003 lines
Test #13:
score: 0
Accepted
time: 153ms
memory: 42160kb
input:
1003 7 amhy ncfsepqjimkaxkvlsqw bgk ncfsepqjim n amhyderccfrcdclbgrhxospemrlwctcnogb ncfsepqjimkaxkvlsqwzxubaz 15 ul k cqm kuixi ovrwzbvkvkzfuqtxooevyvuayhupn o kuixi ulihj k k kzlmrtwddplvqvakmeda ku k kzlmrtwddplvqvakmeda k 15 mf dwhth cwkbrvykvcvqltdovbcy dwhth dwht dwhth cwkbrvykvcvqltdovbcy dwh...
output:
4 58 203 10 8614 17 20 0 0 4 43987 18 164 144 35 412 3 19 20 51 50 0 4 16 37 1 4 14 8 526 197 71 20 26 20 35 55 16 0 3667 274 2024 4 33 19492 435 1 2 10 10 22631 32 690 1 0 13 166 561 6 67 10 33 286 4 1 89 11 18 12266 26 23 280 286 16 400 102 0 10 46 40 1 84 27 14 5699 105 197 39 818 36 6 29491 4 17...
result:
ok 1003 lines
Test #14:
score: 0
Accepted
time: 175ms
memory: 42260kb
input:
1003 36 dv d dvgsku dv d d dv dv d d dv dvg dvgs dvgsku dv d d dv d d nwitakortf dv dv dvg d dvg dv d tksvgjqlfzdolvno d d dvg dv dv dvgsku dv 6 w oursusfeydeqnv wdrteonpibjzxvhzvqbytajwkgqwmucrzemrfowydhkkd wdrteonpibjzxvhzvqb wdrteo wdrteo 11 crmoyb c crmo wkyxgzsh cr flnsuvxkaqknoofhjdackgvavroh ...
output:
1840 19 9 370 7 31 892 504 6 56 150 209 41 0 255 221 1 7670 0 14 638 3 100 1365 17 3 20 16 74 20 15 496 3270 16 0 62 2 345 1 65 2277 0 1 39 0 0 1 2381 707 152 8485 289 109 2066 2803 38 197 1 46 38 44 323 14 1 10 98 2 116 38 82 0 56 2220 4 10 1879 29 241 65 17 7 10 6 8 162 20 9 2 10 4 4 0 4 76 50 194...
result:
ok 1003 lines
Test #15:
score: 0
Accepted
time: 193ms
memory: 30676kb
input:
1003 2 serwtujvdfqkirmfdetefaevwuuwqlkcmierfpxwzimcpmvdqvuwxwqtuq serwtujvdfqkirmfdetefaevwuuwqlkc 6 cnbkhujgexqrjtbcqwncpeiyj cnbkhujgexqrj cnbkhujgexqrj gisjwbxjohpnbvmtwvhhvb c cnbkhujgexqrjtbcqwncpeiyj 21 k k k kpqon k aesamtzjajczokh kpqonwvoiy kpqonwv kpqonwv sbl kpqonwvoiy k tdyvo tdyvo kpqon...
output:
0 4 199 4 199 16 650 1 506 9 0 12 81 4 1587 10 22 0 12383 436 29 152 61990 3 40 4 10 26 1 17 4 102 22 41 32 244 3 6486 1470 2 1425 22 5 2 321 5 70724 1023 7 41 15 7 10 5 11 0 186 34 7 7 4 5 0 1184 23 115 10 124 48 0 19104 969 1179 9 7 1 23042 809 100 86 18 4 1 27 77 84 0 30 1 0 6023 418 10 1 15 52 0...
result:
ok 1003 lines
Test #16:
score: 0
Accepted
time: 258ms
memory: 26312kb
input:
4 10000 aacbfedgih aachgdeibf aacbfedhgi aabciedghf aacbgeihfd aacdgbhefi aacgfeihdb aabgfehidc aabfgehdci aabhdceigf aacdebihfg aabdgeihcf aabgdcihfe aaceibdgfh aacdgehbif aabfdicehg aabhdfegic aacfibgdeh aacdfghieb aabgdifhec aabgdfhice aachedbgif aabdecgihf aabdchefig aacfgbeihd aabdgfihce aabehd...
output:
0 0 0 0
result:
ok 4 lines
Test #17:
score: 0
Accepted
time: 260ms
memory: 40612kb
input:
4 317 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
2600268 13538368 13577242 13530312
result:
ok 4 lines
Extra Test:
score: -3
Extra Test Failed : Time Limit Exceeded on 2
input:
4 40000 a zzzz c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da ...