QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#267278 | #7748. Karshilov's Matching Problem II | manizare | WA | 121ms | 114680kb | C++14 | 2.4kb | 2023-11-27 03:43:33 | 2023-11-27 03:43:34 |
Judging History
answer
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
#define pb push_back
#define F first
#define S second
#define all(a) a.begin(),a.end()
#define pii pair <int,int>
#define PII pair<pii , pii>
#define int long long
#define ld long double
#define sz(v) (int)v.size()
using namespace std ;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int maxn =1e6 + 10 , N = 3e5 + 10 , inf = 1e18 , mod = 1000000007 ;
int n, a[maxn] ,lcp[maxn] , w[maxn] , sm[maxn] , z[maxn] , z2[maxn] , id[maxn] ,b[maxn] , pr[maxn] ;
int ans[maxn] ;
vector <int> G[maxn] , vec[maxn], vec2[maxn];
void dfs(int v ,int p = 0){
sm[v] += w[v] ;
for(int u : G[v]){
sm[u] += sm[v] ;
dfs(u) ;
}
}
signed main() {
ios::sync_with_stdio(0);cin.tie(0);
int q ;
cin >> n >> q;
string s ,t ;
cin >> s >> t ;
for(int i = 1; i <= n ;i++){
cin >> w[i];
}
int T = 0 ;
G[0].pb(1);
for(int i = 1 ; i < sz(s) ; i++){
while(T!=0 && s[T] != s[i]){
T = lcp[T-1] ;
}
if(s[T] == s[i])T++;
lcp[i] = T ;
G[lcp[i]].pb(i+1);
}
dfs(0) ;
int l = 0 , r= 0 ;
for(int i = 1 ; i < n ; i++){
if(i < r){
z[i] = min(r-i , z[i-l]) ;
}
while(i+z[i] < n && s[i+z[i]] == s[z[i]])z[i]++;
if(i+z[i] > r){
l = i , r = i+z[i] ;
}
}
l = 0 , r = 0 ;
for(int i =0 ; i < n ; i++){
if(i < r){
z2[i] = min(r-i , z[i-l]) ;
}
while(i+z2[i] < n && t[i+z2[i]] == s[z2[i]])z2[i]++;
if(i+z2[i] > r){
l = i , r = i + z2[i] ;
}
}
for(int i =1 ; i<= q; i++){
cin >> a[i] >> b[i] ;a[i]--;b[i]--;
vec[a[i]].pb(i);
}
set <pii> se ;
for(int i =0 ; i < n ; i++){
for(int x : vec[i]){
se.insert({b[x] , x}) ;
}
while(sz(se) && (*se.begin()).F < i+z2[i]){
int x = (*se.begin()).S ;
id[x] = i ;
if(b[x] > i+z2[i])while(1){}
se.erase(se.begin()) ;
}
}
for(int i = 2; i <= n ;i++){
w[i] += w[i-1] ;
sm[i] += sm[i-1] ;
}
for(int i =0 ; i < n ;i++){
pr[i] = pr[i-1] + w[z2[i]] ;
}
for(int i = 1; i <= q; i++){
if(id[i] > b[i]){
id[i] = 0;
}
if(id[i]!=0){
if(id[i]+z2[id[i]] < b[i])while(1){}
ans[i] = sm[b[i]-id[i]+1] + pr[id[i]-1] - (a[i] == 0 ? 0 : pr[a[i]-1]) ;
}else{
ans[i] = pr[b[i]] - (a[i] == 0 ? 0 : pr[a[i]-1]) ;
}
}
for(int i = 1; i <= q; i++){
cout << ans[i] << "\n" ;
}
cout << "\n" ;
}
/*
*/
详细
Test #1:
score: 100
Accepted
time: 7ms
memory: 85268kb
input:
8 5 abbabaab aababbab 1 2 4 8 16 32 64 128 1 1 2 3 3 5 4 7 1 8
output:
1 3 3 16 38
result:
ok 5 lines
Test #2:
score: 0
Accepted
time: 4ms
memory: 84540kb
input:
15 4 heheheheehhejie heheheheheheheh 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 2 3 4 8 2 6 1 15
output:
3 13 13 174
result:
ok 4 lines
Test #3:
score: 0
Accepted
time: 115ms
memory: 111184kb
input:
150000 150000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
108147037823514 221878585246974 455339807727642 440286198422821 148115747906237 88695249853257 351159618462315 58850354020997 65824434822005 270158033672354 197732558443069 298193894693053 239511187032650 28139154231325 408380171835227 268053430937402 32417121185965 104813548228675 44074926058619 78...
result:
ok 150000 lines
Test #4:
score: 0
Accepted
time: 121ms
memory: 108264kb
input:
150000 150000 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...
output:
528900815691571 112638556022185 514229554849356 2216206133639915 295388515578381 1658587138269057 652142121207636 166322478628783 490195029871161 1191292846892788 1468501126902703 487990867773908 55994169916421 568966315599642 2522992078581539 2339888502167342 2881203249819745 154700081279584 152537...
result:
ok 150000 lines
Test #5:
score: 0
Accepted
time: 104ms
memory: 110480kb
input:
150000 150000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
386150762496368 2769669390423140 1025785181073675 1707930121656247 332135612349048 113937878332307 1128519694119799 476402941643931 980441978140407 1004994648999517 676169371268202 2607965889355671 273766796671958 711480908011402 71754482763611 400453994282744 975387094872830 810536618300388 2229061...
result:
ok 150000 lines
Test #6:
score: 0
Accepted
time: 110ms
memory: 110696kb
input:
150000 150000 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb...
output:
25254725752128652 23497896664383313 15195391464047263 41143572895791434 7513384536045842 8871310939247699 17423823866879881 14601201534396958 6203483865940624 24953281161800570 24776576029495768 1687640411226 31563282955464371 29947970968962218 1149303801639767 5806503923049299 11201332188941891 116...
result:
ok 150000 lines
Test #7:
score: 0
Accepted
time: 95ms
memory: 108616kb
input:
150000 150000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
4570597927951323 11761063519994765 289982253793476 15684854914181269 19579321543184889 459972639580770 15246459216963247 1833393949769247 22425556248999709 11209560100586843 2883954996867615 14371655418173335 29207399108721 5943079608253242 1664456073054861 27405606916506455 23082758946788297 381175...
result:
ok 150000 lines
Test #8:
score: -100
Wrong Answer
time: 73ms
memory: 114680kb
input:
150000 150000 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
5697498028074951 21822720964918437 11237472002329727 84315407720465773 32198634509153899 40728716039967676 5913555967331675 10487781019914529 270012821917938205 239347797488036653 216168445985667902 67452321725546144 457298584810665039 187789940805492303 46241700003064393 242312618101113 42260337439...
result:
wrong answer 18588th lines differ - expected: '444222799145034868', found: '554548487529361606'