QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#191691 | #5014. 复读程度 | hos_lyric# | 7 | 83ms | 396300kb | C++14 | 3.3kb | 2023-09-30 09:21:46 | 2024-07-04 02:12:08 |
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 <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")
using U = unsigned long long;
int N, Q;
char S[100'010];
vector<U> WL, WR;
vector<int> L1, R1, L2, R2;
namespace brute {
int dpL[5010][5010], dpR[5010][5010];
U W[5010][5010];
vector<U> run() {
memset(dpL, 0, sizeof(dpL));
memset(dpR, 0, sizeof(dpR));
for (int i = N; --i >= 0; ) for (int j = N; --j >= 0; ) if (S[i] == S[j]) dpL[i][j] = 1 + dpL[i + 1][j + 1];
for (int i = 0; i < N; ++i) for (int j = 0; j < N; ++j) if (S[i] == S[j]) dpR[i + 1][j + 1] = dpR[i][j] + 1;
memset(W, 0, sizeof(W));
for (int l = 0; l <= N; ++l) for (int r = l + 1; r <= N; ++r) W[l][r] = 1;
for (int l = 0; l < N; ++l) {
vector<U> sums(N - l + 1, 0);
for (int i = 0; i < N; ++i) sums[dpL[l][i]] += WL[i];
for (int k = N - l; k >= 1; --k) sums[k - 1] += sums[k];
for (int r = l + 1; r <= N; ++r) W[l][r] *= sums[r - l];
}
for (int r = 1; r <= N; ++r) {
vector<U> sums(r + 1, 0);
for (int i = 1; i <= N; ++i) sums[dpR[r][i]] += WR[i];
for (int k = r; k >= 1; --k) sums[k - 1] += sums[k];
for (int l = 0; l < r; ++l) W[l][r] *= sums[r - l];
}
// for(int l=0;l<=N;++l){cerr<<"W["<<l<<"] = ";pv(W[l],W[l]+N+1);}
vector<U> ans(Q, 0);
for (int q = 0; q < Q; ++q) {
const int need = max(R1[q] - L1[q], R2[q] - L2[q]);
for (int l = 0; l <= N; ++l) for (int r = l + need; r <= N; ++r) {
if (dpL[L1[q]][l] >= R1[q] - L1[q] && dpR[R2[q]][r] >= R2[q] - L2[q]) {
ans[q] += W[l][r];
}
}
}
return ans;
}
} // brute
int main() {
for (; ~scanf("%d%d", &N, &Q); ) {
scanf("%s", S);
WL.assign(N + 1, 0);
for (int i = 0; i < N; ++i) {
scanf("%llu", &WL[i]);
}
WR.assign(N + 1, 0);
for (int i = 1; i <= N; ++i) {
scanf("%llu", &WR[i]);
}
L1.resize(Q);
R1.resize(Q);
L2.resize(Q);
R2.resize(Q);
for (int q = 0; q < Q; ++q) {
scanf("%d%d%d%d", &L1[q], &R1[q], &L2[q], &R2[q]);
--L1[q];
--L2[q];
}
const auto ans = brute::run();
for (int q = 0; q < Q; ++q) {
printf("%llu\n", ans[q]);
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 7
Accepted
Test #1:
score: 7
Accepted
time: 83ms
memory: 396012kb
input:
500 500 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
15720454042420499810 4058077030882532408 14651762045124606089 4030024243931986061 18033423360813892607 9470601111824364484 3883374861354698625 16650831689368240202 8339028189650687576 2683289915379600554 13133811958066776394 14181220923901262251 18173739360450512256 13142314545999179754 148925491596...
result:
ok 500 lines
Test #2:
score: 0
Accepted
time: 60ms
memory: 396100kb
input:
500 500 zszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszzszszzszzszszzszszzszzszszzszszzszz...
output:
4843650749197240262 7777110205341291111 533576317536031175 16712994243500559204 9988085877723856684 9644193924482321332 3247342125341043527 18152622312040037224 13045121434804725850 10593529771756855740 13316626648976199221 6181092693273210423 9148547538129213975 9376364571107435561 2140403332478526...
result:
ok 500 lines
Test #3:
score: 0
Accepted
time: 75ms
memory: 396108kb
input:
500 500 aaaaabbaabbabbbaabaabbabbabbbaaabaaaabbbbbbaaabaabbbbbbaabbaaaaababbaaaaabbbbababbabaabbbbbbbbaaaaaaabaabbabbbbaabbaabaaabbbabbaabbbabaabaaaaababbaabbabbbabbababbbaabbabaaabbbbaaabbbabbabaabbabbaaabbaabbabbbbaaaaaababaaaabaababbaabbabbabbbabbaabbbaabbaaababaaabbababbbabaababaabbbbbabbababaab...
output:
841375054012212333 13406426787139944226 6541986259052503362 10583258635957015782 11582649090627508617 4747829250201069768 11571422754704651998 14603866222879735665 8438246043626601023 16155298152184479844 9052925087624568857 18388444310571976215 13304308468056840286 18125780089857220122 363421144082...
result:
ok 500 lines
Test #4:
score: 0
Accepted
time: 67ms
memory: 396300kb
input:
500 500 sulasusulasusulasulasulsulasusulasususulasulasulsulasulasulsulasulasulsulasususulasulasulsulasulasulsulasulasulsulasusulasulasulsulasulasulsulasulasulsulasusulasulasulsulasulasulsulasulasulsulasulasulsulasususulasulasulsulasulasulsulasulasulsulasusulasulasulsulasulasulsulasusulasusulasusulas...
output:
2320755102639148175 17108462705447992416 6030359132551843296 889683039894413148 10901851555398837076 1991544941914879425 9087724446342520941 5134546535199286414 12947484109492427089 5962550827492657739 4877066450610765849 6699323319072695780 11167645157062070624 13985172887966350800 8075429763917070...
result:
ok 500 lines
Test #5:
score: 0
Accepted
time: 69ms
memory: 396012kb
input:
500 500 bbbbbbqouvtudkzorrxinacvncytgmtbbbbbbfyfzxjdqlcaadccvsbbbbbbqouvtudkzorrxinacvncytgmtbbbbbbbbbbbbqouvtudkzorrxinacvncytgmtbbbbbbfyfzxjdqlcaadccvsbbbbbbqouvtudkzorrxinacvncytgmtbbbbbbbbbbbbqouvtudkzorrxinacvncytgmtbbbbbbfyfzxjdqlcaadccvsbbbbbbqouvtudkzorrxinacvncytgmtbbbbbbbbbbbbqouvtudkzorrx...
output:
18295637548117042088 6105463594888898313 15681140870484623884 17957090271580958329 11763132903578154240 17769627666201366836 16493946443969420940 12712093409624537595 2436698665645215125 8863273927617841787 5065586857868462806 8771649105206144878 6715985691821336097 8851433094837196039 7055234226266...
result:
ok 500 lines
Test #6:
score: 0
Accepted
time: 52ms
memory: 396012kb
input:
500 500 yyyayyayyyayyayyyayyayyyayyyayyyayyayyyyayyayyyayyyayyayyyayyyayyayyayyyyayyyayyyayyayyayyyayyayyayyyayyayyayyyayyyyyayyayyyyayyayyyayyayyyayyyayyyayyayyyayyayyyyayyyayyayyayyyayyayyyayyyyayyyyayyayyyayyayyayyyayyayyayyyyayyayyyayyayyayyyayyyyayyayyayyyayyayyayyyayyayyayyyyayyyayyyayyyyayyay...
output:
6159560444195180556 5294852391541430076 6195718271241091926 7959984071139675340 1598729415848168155 4879964117998052348 2279721248493220290 2026655128556749470 9803272548967597498 1028236064772678471 5410852487707111065 3600180224455323043 60239358603452318 2179897463397058094 16626503365867372202 3...
result:
ok 500 lines
Test #7:
score: 0
Accepted
time: 51ms
memory: 396040kb
input:
500 500 fffffffffffxfqifffnmogfffxfqiffffffffxfqifffnmogfffxfqiffffffxfqifffnmogfffxfqifffffffffffxfqifffnmogfffxfqiffffffffxfqifffnmogfffxfqifffffffffffffxfqifffnmogfffxfqiffffffffxfqifffnmogfffxfqifffffffffxfqifffnmogfffxfqiffffffffxfqifffnmogfffxfqiffffffffxfqifffnmogfffxfqiffffffffxfqifffnmogfff...
output:
6263422992304461664 10533199195660359295 11930245273187149005 380050211417129795 8399013088311259527 7005867409130681392 6872331929648615383 11661502418569897193 18027795221888639599 8932010711134684820 6331436398298306214 14599171184201697655 16632037523890780117 10373998601812781913 16089838760431...
result:
ok 500 lines
Subtask #2:
score: 0
Time Limit Exceeded
Dependency #1:
100%
Accepted
Test #8:
score: 0
Time Limit Exceeded
input:
5000 5000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
result:
Subtask #3:
score: 0
Skipped
Dependency #2:
0%
Subtask #4:
score: 0
Runtime Error
Test #22:
score: 0
Runtime Error
input:
100000 100000 zbbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbaabbabaabbaababbabaababbaabbabaababbabaabbaababbabaababbaabbabaabbaababbaabbabaababbabaabbaababbabaababbaabbabaababbabaabbaabab...
output:
result:
Subtask #5:
score: 0
Skipped
Dependency #4:
0%
Subtask #6:
score: 0
Skipped
Dependency #2:
0%
Subtask #7:
score: 0
Skipped
Dependency #3:
0%