QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#276169#5065. Beautiful StringrageOfThunder#AC ✓1459ms201540kbC++143.5kb2023-12-05 17:20:522023-12-05 17:20:53

Judging History

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

  • [2023-12-05 17:20:53]
  • 评测
  • 测评结果:AC
  • 用时:1459ms
  • 内存:201540kb
  • [2023-12-05 17:20:52]
  • 提交

answer

//-DYUNQIAN -std=c++14 -O2 -Wall
#include<bits/stdc++.h>

#define ll long long
#define fi first
#define se second
#define mk make_pair

using namespace std;

inline int read(){
    int x=0,f=1;char c=getchar();
    for(;(c<'0'||c>'9');c=getchar()){if(c=='-')f=-1;}
    for(;(c>='0'&&c<='9');c=getchar())x=x*10+(c&15);
    return x*f;
}

const int mod=1e9+7;
int ksm(int x,int y,int p=mod){
    int ans=1;
    for(int i=y;i;i>>=1,x=1ll*x*x%p)if(i&1)ans=1ll*ans*x%p;
    return ans%p;
}
int inv(int x,int p=mod){return ksm(x,p-2,p)%p;}
mt19937 rnd(time(0));
int randint(int l,int r){return rnd()%(r-l+1)+l;}
void add(int &x,int v){x+=v;if(x>=mod)x-=mod;}
void Mod(int &x){if(x>=mod)x-=mod;}

void Assert(bool c,int L=0){if(!c){cout<<"Assertion Failed at "<<L<<endl;exit(0);}}

void cmax(int &x,int v){x=max(x,v);}
void cmin(int &x,int v){x=min(x,v);}

const int N=5005;

vector<int>G[N<<1];
int n,m,f[N][N];
namespace sam{
	const int D=10;
	int nxt[N<<1][D],len[N<<1],lst=1,tot=1;
	int pos[N<<1],st[N<<1],ed[N<<1],fa[N<<1];
	void ins(int c){
//		cout<<"ins "<<c<<endl;
		int np=++tot,p=lst;len[np]=len[p]+1,lst=np,pos[np]=len[np];
//		cout<<"p = "<<p<<endl;
		while(p&&nxt[p][c]==0)nxt[p][c]=np,p=fa[p];
		if(p==0){fa[np]=1;return ;}
		int q=nxt[p][c];
		if(len[q]==len[p]+1){fa[np]=q;return ;}
		int nq=++tot;len[nq]=len[p]+1;
		fa[nq]=fa[q],fa[q]=fa[np]=nq,memcpy(nxt[nq],nxt[q],sizeof(nxt[nq]));
		while(p&&nxt[p][c]==q)nxt[p][c]=nq,p=fa[p];
	}
	set<int>endp[N<<1];
	void buildTree(){
//		V=tot;
		for(int i=1;i<=tot;i++){
			if(fa[i])G[fa[i]].emplace_back(i);
			st[i]=len[fa[i]]+1,ed[i]=len[i];
			if(pos[i])endp[i].insert(pos[i]);
		}
	}
	void Merge(set<int>&A,set<int>&B){
		if(A.size()<B.size())swap(A,B);
		for(int x:B)A.insert(x);B.clear();
	}
	void getans(){
//		cout<<"tot = "<<tot<<endl;
		buildTree();
		function<void(int)>dfs=[&](int u){
//			cout<<"dfs "<<u<<endl;
			for(int v:G[u])dfs(v);
			for(int v:G[u])Merge(endp[u],endp[v]);
			vector<int>P;
//			cout<<"calc "<<u<<" endpos = ";for(int x:endp[u])cout<<x<<" ";puts("");
//			cout<<"st,ed = "<<st[u]<<","<<ed[u]<<endl;
			for(int x:endp[u])P.emplace_back(x);
			for(int L=st[u];L<=ed[u];L++){
				int p=P.size();
				for(int i=(int)P.size()-1;i>=0;i--){
					int r=P[i],l=P[i]-L+1;
					while(p>0&&P[p-1]-L+1>r+1)p--;
					f[l][r]=P.size()-p;
//					cout<<"f ["<<l<<","<<r<<"] = "<<f[l][r]<<endl;
				}
			}
		};
		dfs(1);
	}
	void clear(){
		for(int i=1;i<=tot;i++)memset(nxt[i],0,sizeof(nxt[i])),len[i]=pos[i]=st[i]=ed[i]=fa[i]=0,endp[i].clear(),G[i].clear();
		lst=1,tot=1;
	}
};

string str;
int lcp[N][N];
void solve(){
	cin>>str;n=str.size();sam::clear();
	for(int i=1;i<=n;i++)sam::ins(str[i-1]-'0');
	for(int i=n;i>=1;i--)for(int j=n;j>=1;j--)lcp[i][j]=(str[i-1]==str[j-1]?lcp[i+1][j+1]+1:0);
	sam::getans();
	
//	for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)if(f[i][j])cout<<"f "<<i<<" "<<j<<" = "<<f[i][j]<<endl;
	
	for(int i=1;i<=n;i++)for(int j=n-1;j>=i;j--)f[i][j]+=f[i][j+1];
	ll ans=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<i;j++){
			int sum=0;
//			if(i==5&&j==3){
//				cout<<lcp[i][j]<<" "<<f[i][2*i-j]<<endl;
//			}
			if(lcp[i][j]>=i-j)ans+=f[i][2*i-j],sum=f[i][2*i-j];
//			if(sum)cout<<"i,j = ["<<i<<','<<j<<"] -> ans = "<<ans<<endl;
		}
	}
	cout<<ans<<endl;
	
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)f[i][j]=lcp[i][j]=0;
}

signed main(void){

#ifdef YUNQIAN
    freopen("B.in","r",stdin);
#endif

	int tt=read();while(tt--)solve();

    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 8000kb

input:

2
114514
0000000

output:

1
3

result:

ok 2 number(s): "1 3"

Test #2:

score: 0
Accepted
time: 213ms
memory: 200984kb

input:

11
79380
2483905227
37902399703986576270
39991723655814713848046032694137883815354365954917
5541883522667841718787744915558298207485830622522715211018760095628594390563630840464643840093757297
56530485554219245862513973750218715585679416120445975390556326891488719311495909340757506478400624741858999...

output:

0
0
0
2
4
20
119
113
1086
2128
15166

result:

ok 11 numbers

Test #3:

score: 0
Accepted
time: 3ms
memory: 12468kb

input:

50
11111111111111111111111111111111111111121111111111111111111111111111111111111112111111111121111111111211111121211121111111111111111111111111111211121111111111111111111111111111111111111111111111111112
111111111111111111111111111111111111111111111121111121111111111111111111111111111111111111111111...

output:

779344
799116
716078
723215
1197647
403357
652134
625671
414294
942493
390998
793444
612061
507395
473508
836065
461623
374925
539333
592574
676408
610940
463761
490048
995917
595830
424894
332669
596834
655095
521489
1032050
697420
752056
406316
360973
1180943
948628
478572
1026603
711224
429752
49...

result:

ok 50 numbers

Test #4:

score: 0
Accepted
time: 12ms
memory: 12480kb

input:

50
11211121122222111222111111222112111221112111121112221111111121211111212211212122112212221221112112221221112211211112121222112221211122112211112111112112211121222111222212211121111111112111112121111122
112112121211212111212221221222211211121212221111112122121211112221221121121112111221211112122121...

output:

7499
6375
7041
7889
6622
6804
8695
8795
7018
8387
8910
8019
8223
8820
7324
7144
8035
9941
7073
7373
7427
7280
6946
8204
7931
6769
7050
9268
7682
8232
7797
7356
7012
8967
7469
6869
11728
6562
7604
8840
7885
8658
7006
8156
10694
6716
6121
7499
7456
7981

result:

ok 50 numbers

Test #5:

score: 0
Accepted
time: 301ms
memory: 83212kb

input:

15
111111111111111111111111111111111111111111111111111111111111121111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111211111111111111111111111111111111111111111111111...

output:

6611556286
8447635347
4351265656
8244172287
6847075843
5064323828
5818821992
5187397748
6202849391
7100699750
8826693258
9304467838
9691754783
12524687288
10378182916

result:

ok 15 numbers

Test #6:

score: 0
Accepted
time: 252ms
memory: 83272kb

input:

15
111111111111111111111111111111111111111111111111111111121112111111111111111111111111211111112111111111111111111111111112112111111111211111111111111111121211111111111111111112121111211112112111111112111111111111111112111111111111111111111111111111111111111211111211211111111111111112211111111111111...

output:

99283290
121730268
95231372
139100190
109487920
93015077
138212377
180336129
94959502
88117283
81796472
100172151
133716692
92198870
119549081

result:

ok 15 numbers

Test #7:

score: 0
Accepted
time: 879ms
memory: 201328kb

input:

6
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

385321895637
278064026340
462204013200
622961805899
319151572118
194136546751

result:

ok 6 numbers

Test #8:

score: 0
Accepted
time: 853ms
memory: 201044kb

input:

6
1111211111111111111111111112111111111111111111111111111111111111111111111111111111111111111121111111112111111111111111111111211111111111111111111111111111111111111111111111111111112111111111111111111111111111111111111111111111111111111111111111111111111111111211111111112111111111111111111111111111...

output:

4279296283
6481388714
4807510535
5043682133
5816318027
4092854445

result:

ok 6 numbers

Test #9:

score: 0
Accepted
time: 1099ms
memory: 201540kb

input:

6
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

4333336111111
4333336111111
4333336111111
4333336111111
4333336111111
4333336111111

result:

ok 6 numbers

Test #10:

score: 0
Accepted
time: 838ms
memory: 201056kb

input:

6
1111111111111111111111111111111111121111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

4827246439
5292779668
4777240971
4935748521
5102858676
4471955490

result:

ok 6 numbers

Test #11:

score: 0
Accepted
time: 861ms
memory: 201236kb

input:

6
1111111111112111111112111111111111111211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111211111111111111111111111111111111111111112111111111111111111111111111111111111111111111121111111111111111111111111111111111111111111111111111111121111111111111111111111111...

output:

5823633843
3699828594
5341000227
4377298465
5641079075
4447500985

result:

ok 6 numbers

Test #12:

score: 0
Accepted
time: 886ms
memory: 201256kb

input:

6
1111111111111111111111111111111121121111111111111111112111111111111111111111111111111111111111111111111211111111111111111111121111111111111111111111111111111111111111111111111111111121111111111211111111111111111111111111121111112111111111111111111111111111111111111111111111111112111111111111111111...

output:

4267388536
4492067906
3738167207
4136464174
5508219259
4485317348

result:

ok 6 numbers

Test #13:

score: 0
Accepted
time: 1418ms
memory: 201212kb

input:

6
1101000101000011111101010011000111011101101000100101001011110000000010100000011011010010110000100000100100101110000010110010101011011100101000111010101110101010100011011111111111101001110101011000000011100011110001100001100101101111101011101110001000100110011001101100000010111111000010010110100011...

output:

4170757
4235303
4280835
4036729
4224784
4097571

result:

ok 6 numbers

Test #14:

score: 0
Accepted
time: 1459ms
memory: 201172kb

input:

6
1000010101000000011000111100000101011010010011100011011000010110111100111100000011011010110111000110000000010011000110110110101010010001110101100011100111101010100100111010000111101110110010100100010111010100111011011010001100001011111110100111011011110111110011011110001000001110000111001110000001...

output:

4170610
4216137
4141929
4074459
4103480
4155187

result:

ok 6 numbers

Test #15:

score: 0
Accepted
time: 1436ms
memory: 201184kb

input:

6
0010101111000111001110000101110110111110111001000111111101101000010110010110011001110111000100100110101110101110110001001110101110010100000001011000000110001010001101101100010100101001111100010010011110110110010011100110110011000010100111010000001001000011101000001100000010111000100111001111000011...

output:

4188094
4069991
4153306
4138723
4193430
4269969

result:

ok 6 numbers

Test #16:

score: 0
Accepted
time: 1418ms
memory: 201060kb

input:

6
1010011000022211220102102221221120220200012021212112100210101220120211212010020000001200102200001021100202210100212011022212000020001120211012111021201021201220012221011220100212012112021210220202110212122010110220100212102001121021212201201202220011202011121020002122220201022101012100110120200202...

output:

762521
775249
766566
776466
767496
773997

result:

ok 6 numbers

Test #17:

score: 0
Accepted
time: 1350ms
memory: 201104kb

input:

6
2112200102110121202000120220021122121112012120022122222000022200200200211122202220011202112012022110001210200101222201000121012210200200121222101011112202101220220100201111102020110120202110212100011101022020220222022201220210210010212100120200220210110020010002212210222220220122101021222212102012...

output:

775146
780112
772793
789871
769398
751477

result:

ok 6 numbers

Test #18:

score: 0
Accepted
time: 1323ms
memory: 201164kb

input:

6
1202020112011201022200111211201111201112021222202021211010212110111212212021210022212220102001102212021012020201112210211001112121110021122220210011011111200001210100110100022020002221212201210002002201121002012101001122212000012000221012102122002202121221012120010012210221102120221112020021102200...

output:

770245
773441
778781
774717
763612
785411

result:

ok 6 numbers

Test #19:

score: 0
Accepted
time: 1254ms
memory: 201060kb

input:

6
1403433222403320324443213210401332204104111441413010310140204031300032441124444024440444032203210330020104104024321422401444400214444401012242144300114343324010000332043341320044400440221433034402011001440122344021300323423140212040404341013130244243312333424204220102034014133104032302000242104333...

output:

127310
131513
132001
133547
136948
123146

result:

ok 6 numbers

Test #20:

score: 0
Accepted
time: 1233ms
memory: 201116kb

input:

6
4420212030303213202420200421002204043223242404131332322013240323024421211333422120334210210322141014423131241104001320012024401040142403221101312330144111303244432233344222004311342314001104344332304000332444330123043110212434421432133044042020231441143211202223112033431111334241014440341202124111...

output:

133037
135811
136885
131180
122015
132937

result:

ok 6 numbers

Test #21:

score: 0
Accepted
time: 1202ms
memory: 201048kb

input:

6
4332230232243230444230131024204211040243041244334030202344403220024231030034441044424432243332040132013111231340040332313403140042002043232021032222301011023040424430332121024433024423342042330400121000310403223022401140331041341342144244242001003344304422234013403242040101241211004243144123211431...

output:

127430
133525
126715
132274
127698
126098

result:

ok 6 numbers

Test #22:

score: 0
Accepted
time: 1114ms
memory: 200956kb

input:

6
0527263590989141398232467856769831076313726236318424949659487118071189858207212813256095130174457689283834002567489506688742811929495836845346574214442431806207922088635218623247713449618250327996704066964677828138959300478603648072151173680624525749414417511246438552658377964191998159022294264700...

output:

13052
14055
12735
13977
13607
13263

result:

ok 6 numbers

Test #23:

score: 0
Accepted
time: 1160ms
memory: 200956kb

input:

6
8985698942224498646718114023735214365880465106150608651120921860620477353602287449891278787783353603584570539632891665520222495181615797114829203643301699646447450283290904599608791054139526174224570160892800365598486001957635902589788386777049717342723358733031824964857029876786039246614641902915...

output:

14405
14107
14583
13846
13886
14627

result:

ok 6 numbers

Test #24:

score: 0
Accepted
time: 1136ms
memory: 200964kb

input:

6
2965981105224229828206155834019360865567450584618944735155746817705841028252810298576084705498691348447250223233175567175756271273064057221729918634935150104533255094708503568665533583917395614462772605254978221157191215802752180325788860577750484790419032850005124772538059322878051522259269884117...

output:

14349
13527
14319
14103
13213
13615

result:

ok 6 numbers