QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#267278#7748. Karshilov's Matching Problem IImanizareWA 121ms114680kbC++142.4kb2023-11-27 03:43:332023-11-27 03:43:34

Judging History

你现在查看的是最新测评结果

  • [2024-08-25 20:42:18]
  • hack成功,自动添加数据
  • (/hack/789)
  • [2023-11-27 03:43:34]
  • 评测
  • 测评结果:WA
  • 用时:121ms
  • 内存:114680kb
  • [2023-11-27 03:43:33]
  • 提交

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'