QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#367467 | #8512. Harmonic Operations | hos_lyric | WA | 0ms | 4080kb | C++14 | 3.3kb | 2024-03-26 00:25:04 | 2024-03-26 00:25:05 |
Judging History
answer
#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
using Int = long long;
template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")
/*
s, t: \Z/M\Z -> char
s ~~> t
t[i] = s[f[i]]
t = s o f (pullback)
0 <= d < M
d : x -> (+x + d) mod M
M+d: x -> (-x + d) mod M
*/
int M;
int mod(int d) {
for (; d < 0; d += M) {}
for (; d >= M; d -= M) {}
return d;
}
// f o g
int mul(int f, int g) {
return (((f >= M) != (g >= M)) ? M : 0) + mod(f + ((f >= M) ? -g : g));
}
int SLen;
char S[200'010];
int K;
vector<int> F;
int readFunc() {
char op;
scanf(" %c", &op);
if (op == 'I') {
return M + (M - 1);
} else if (op == 'R') {
int d;
scanf("%d", &d);
return d % M;
} else if (op == 'L') {
int d;
scanf("%d", &d);
return (SLen - d) % M;
} else {
assert(false);
}
}
int main() {
for (; ~scanf("%s", S); ) {
SLen = strlen(S);
vector<int> fail(SLen + 1);
{
int j = fail[0] = -1;
for (int i = 0; i < SLen; ++i) {
for (; ~j && S[j] != S[i]; j = fail[j]) {}
fail[i + 1] = ++j;
}
}
M = SLen - fail[SLen];
if (SLen % M != 0) M = SLen;
cerr<<"M = "<<M<<endl;
// S = S o tar
int tar = -1;
for (int i = 0, j = 0; i < 2 * M; ++i) {
const char s = S[mod(-i)];
for (; ~j && S[j] != s; j = fail[j]) {}
if (++j == M) {
// -i-1, -i-2, ..., -i+1, -i -> 0, 1, ..., M-2, M-1
cerr<<"tar = M + "<<mod(-i-1)<<endl;
tar = M + mod(-i-1);
break;
}
}
scanf("%d", &K);
F.resize(K);
for (int k = 0; k < K; ++k) {
F[k] = readFunc();
}
vector<int> FProd(K + 1);
FProd[0] = 0;
for (int k = 0; k < K; ++k) {
FProd[k + 1] = mul(FProd[k], F[k]);
}
// cerr<<"F = "<<F<<endl;
// cerr<<"FProd = "<<FProd<<endl;
/*
F[l] o ... o F[r-1] = (0 or tar)
FProd[r] = FProd[l] o (0 or tar)
*/
Int ans = 0;
vector<int> freq(2 * M, 0);
for (int k = K; k >= 0; --k) {
const int f = FProd[k];
ans += freq[f];
if (~tar) {
ans += freq[mul(f, tar)];
}
++freq[f];
}
printf("%lld\n", ans);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 4064kb
input:
pda 2 R 2 L 2
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3824kb
input:
aaa 4 R 1 I I R 1
output:
10
result:
ok 1 number(s): "10"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3768kb
input:
caso 6 L 1 I I R 1 I I
output:
4
result:
ok 1 number(s): "4"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3844kb
input:
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq 100 L 12 I R 47 L 54 I I R 80 L 86 L 19 R 5 L 53 L 40 R 20 L 11 R 40 I I R 66 R 6 L 76 L 93 R 39 I I L 24 R 59 R 99 L 52 I I R 77 L 11 R 60 L 16 I L 40 I R 35 L 64 R 11 L 34 I R 35 I L 87 I I L 42 L ...
output:
5050
result:
ok 1 number(s): "5050"
Test #5:
score: 0
Accepted
time: 0ms
memory: 4072kb
input:
wewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewewe 100 R 83 R 34 I I R 87 R 74 L 98 I L 77 L 8 R 23 L 94 I I L 79 L 87 L 47 L 85 L 49 L 7 I I R 97 R 15 I R 66 L 8 R 62 R 68 I I R 32 R 24 R 36 L 60 R 75 R 77 I L 42 I L 61 I I R 78 R 51 L 98 I L 77 I I...
output:
2556
result:
ok 1 number(s): "2556"
Test #6:
score: 0
Accepted
time: 0ms
memory: 3728kb
input:
rtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtrtr 100 R 27 R 68 I L 29 L 51 L 19 L 12 L 10 L 52 L 38 L 17 R 30 L 29 L 51 L 17 R 29 I R 96 R 50 R 56 I I I L 73 L 15 I R 1 R 81 L 94 R 27 R 52 R 57 R 44 I I L 53 I R 87 L 39 L 25 I I R 25 I I I L 88 L ...
output:
116
result:
ok 1 number(s): "116"
Test #7:
score: 0
Accepted
time: 0ms
memory: 3764kb
input:
tcldtcldtcldtcldtcldtcldtcldtcldtcld 100 L 20 I I I L 20 R 13 L 16 L 19 R 10 I I I L 11 R 30 R 30 I L 35 I L 28 R 23 R 24 L 20 R 15 I I L 13 I R 1 I R 6 I I L 22 I L 22 R 22 L 30 L 30 I I I R 35 I R 3 L 1 R 4 I R 11 R 2 R 21 R 15 I R 5 L 2 L 4 L 7 L 19 L 29 R 8 I L 24 I I I L 29 I R 35 R 32 I R 14 L...
output:
703
result:
ok 1 number(s): "703"
Test #8:
score: 0
Accepted
time: 0ms
memory: 3780kb
input:
wflbkhwflbkhwflbkhwflbkhwflbkhwflbkh 100 I R 28 R 13 R 7 R 29 I I I R 25 R 10 R 23 I R 26 I I L 18 I R 18 L 6 I I R 8 R 8 I R 6 L 16 I R 2 R 17 L 31 R 31 L 22 R 26 L 21 L 20 R 10 L 13 R 33 R 13 R 35 R 22 L 2 L 4 R 19 L 32 L 25 I L 31 R 10 R 17 R 15 L 6 L 9 R 31 R 20 I I R 4 I L 30 L 30 L 2 R 18 R 35...
output:
442
result:
ok 1 number(s): "442"
Test #9:
score: 0
Accepted
time: 0ms
memory: 3764kb
input:
mzgaokjwpmzgaokjwpmzgaokjwpmzgaokjwp 100 R 10 I L 24 L 8 I L 19 L 25 I I R 27 R 24 I I L 16 I I L 35 R 14 I L 23 R 17 R 16 R 4 R 4 L 29 I R 11 R 9 R 15 I L 18 I I L 25 R 13 L 24 I I L 8 I I I I L 24 I I L 19 L 23 I L 20 R 35 L 31 I I R 27 I I I L 35 R 16 L 10 R 28 R 14 I I R 30 R 18 L 16 L 6 L 12 R ...
output:
280
result:
ok 1 number(s): "280"
Test #10:
score: 0
Accepted
time: 0ms
memory: 4080kb
input:
gtvcymjngzntgtvcymjngzntgtvcymjngznt 100 L 33 L 5 R 31 R 18 I R 14 R 9 L 1 I R 1 R 15 L 15 I I I L 13 R 7 I I L 2 I L 3 I L 19 L 22 L 2 R 32 I L 1 R 24 R 23 I R 25 L 11 R 34 R 25 I L 25 R 22 R 34 I I L 2 R 13 L 3 I L 30 I R 7 R 20 I R 24 L 34 R 23 I L 26 R 22 I I I R 17 I I L 14 R 27 R 35 I L 34 L 3...
output:
206
result:
ok 1 number(s): "206"
Test #11:
score: 0
Accepted
time: 0ms
memory: 3780kb
input:
dvaauyemcqhrmduoumdvaauyemcqhrmduoum 100 L 21 R 12 R 30 L 13 I I L 1 L 31 R 4 L 20 I L 6 I L 29 R 19 L 12 R 25 R 25 I R 21 I L 12 L 25 R 35 L 8 R 7 R 29 I R 4 L 24 R 29 I I I L 12 L 24 R 19 L 33 L 4 I R 35 I R 16 I R 10 I R 18 R 7 L 33 I I R 22 L 16 L 7 L 20 R 32 I I R 27 I L 9 R 16 I I R 32 I R 1 L...
output:
180
result:
ok 1 number(s): "180"
Test #12:
score: -100
Wrong Answer
time: 0ms
memory: 3828kb
input:
pkmsckbnjeeojagpdtfxlmlgofbrygcuqiahynrwooxgdruurdgxoowrnyhaiqucgyrbfoglmlxftdpgajoeejnbkcsmkplhxxhl 100 L 14 R 54 L 88 L 66 L 38 R 91 I I I I R 56 L 4 L 76 R 12 L 86 I I I I R 52 L 98 L 98 L 39 R 60 L 14 R 23 R 92 R 99 L 71 I I I I L 1 R 33 I R 65 L 72 I I I R 20 R 48 L 81 L 7 I R 72 R 14 I I R 10 ...
output:
82
result:
wrong answer 1st numbers differ - expected: '75', found: '82'