QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#838919#2668. 论战捆竹竿hotdogseller100 ✓737ms31656kbC++142.8kb2025-01-01 09:18:542025-01-01 09:19:02

Judging History

This is the latest submission verdict.

  • [2025-01-01 09:19:02]
  • Judged
  • Verdict: 100
  • Time: 737ms
  • Memory: 31656kb
  • [2025-01-01 09:18:54]
  • Submitted

answer

#include<bits/stdc++.h>

#define pii pair<int,int>
#define maxn 500005
#define int long long
#define INF 4557430888798830399

using namespace std;

inline int read(){
    int lre=0,f=1;
    char c=getchar();
    while(!isdigit(c)){
        if(c=='-'){
            f=-1;
        }
        c=getchar();
    }
    while(isdigit(c)){
        lre=(lre<<3)+(lre<<1)+(c-'0');
        c=getchar();
    }
    return lre*f;
}

int n,w;
string str;
int kmp[maxn];
int m;
int a[maxn];//周期,最后求的就是他们的线性组合 
int f[maxn],g[maxn];

int l,r;
int q[maxn],ind[maxn];
int pos[maxn];

void show_arr(string name,int arr[],int l,int r){
	cout<<name<<":"; 
	for(int i=l;i<=r;i++){
		if(arr[i]==INF)cout<<"inf ";
		else cout<<arr[i]<<" ";
	}
	cout<<endl;
}

bool cmp(int a,int b){
	return f[a]<f[b];
}

void trans(int m1,int m2){
	if(m1==-1)return;
	memset(g,0x3f,sizeof(g));
	for(int i=0;i<m1;i++){
		g[f[i]%m2]=min(g[f[i]%m2],f[i]);
	}
	for(int i=0;i<m2;i++){
		f[i]=g[i];//再用f[i]+k*m1更新 
		ind[i]=i;
	}
	memset(pos,0,sizeof(pos));
	sort(ind,ind+m2,cmp);
	for(int i=0;i<m2;i++){
		if(pos[ind[i]])continue;
		int id=1,x=ind[i];
		l=1,r=0;
		do{	
			pos[x]=id++;
			while(r>=l&&f[x]-pos[x]*m1<=f[q[r]]-pos[q[r]]*m1)r--;
			q[++r]=x;
			f[x]=f[q[l]]+(pos[x]-pos[q[l]])*m1;
			x=(x+m1)%m2;
		}while(!pos[x]);
	}
}//换模 

void calc(int d,int lim,int mod){
	for(int i=0;i<mod;i++){
		ind[i]=i;
	}
	memset(pos,0,sizeof(pos));
	sort(ind,ind+mod,cmp);
	for(int i=0;i<mod;i++){
		int x=ind[i];
		if(pos[x])continue;
		int id=1;
		l=1,r=0;
		do{
			pos[x]=id++;
			while(r>=l&&pos[x]-pos[q[l]]>lim)l++;
			while(r>=l&&f[x]-pos[x]*d<=f[q[r]]-pos[q[r]]*d)r--;
			q[++r]=x;
			f[x]=min(f[x],f[q[l]]+(pos[x]-pos[q[l]])*d+mod);
			x=(x+d)%mod;
		}while(!pos[x]);
	} 
}//环上转移(公差,长度限制,什么意义下取模) 

void solve(){
	n=read();w=read();
	cin>>str;str=' '+str;
	for(int i=2;i<=n;i++){
		int j=kmp[i-1];
		while(j&&str[j+1]!=str[i]){
			j=kmp[j];
		}
		if(str[j+1]==str[i])j++;
		kmp[i]=j;
	}
	int j=n;m=0;
	while(j){
		j=kmp[j];
		a[++m]=n-j;
	}
	memset(f,0x3f,sizeof(f));
	f[0]=0;
	
//	show_arr("a",a,1,m);
	
	int lst=-1;
	int pre=1,nxt;
	while(pre<=m){
		nxt=pre+1;
		while(a[nxt]-a[nxt-1]==a[nxt+1]-a[nxt]&&nxt!=m)nxt++;
		nxt=min(nxt,m);
		//[pre,nxt]之间
		if(lst!=-1){
			trans(lst,a[pre]);
		} 
	//	cout<<"solve ["<<pre<<","<<nxt<<"]"<<endl;
		if(nxt>pre)calc(a[pre+1]-a[pre],nxt-pre,a[pre]);
	//	show_arr("f",f,0,a[pre]-1);
		lst=a[pre];pre=nxt+1;
	}
//	cout<<"lst="<<lst<<endl;
	int res=0;
	for(int i=0;i<lst;i++){
	//	cout<<"i="<<i<<" dis="<<f[i]<<endl;
		if(f[i]<=w-n){
			res+=(w-n-f[i])/lst+1;
		}
	}
	printf("%lld\n",res);
}

signed main(){
	int T=read();
	while(T--){
		solve();
	}
	return 0;
}
/*
1
9 100
abaabbaba
82
*/

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 5
Accepted
time: 3ms
memory: 9948kb

input:

5
3 10
aab
6 10
bbbaaa
6 10
aaaaab
3 10
bba
3 10
baa

output:

3
1
1
3
3

result:

ok 5 number(s): "3 1 1 3 3"

Test #2:

score: 5
Accepted
time: 0ms
memory: 19140kb

input:

5
5 20
aabaa
6 20
bbabab
4 20
aaaa
5 20
abbbb
7 20
abbbaba

output:

14
6
17
4
5

result:

ok 5 number(s): "14 6 17 4 5"

Test #3:

score: 5
Accepted
time: 3ms
memory: 19356kb

input:

5
100 1000000000000000000
pubuapdogqmtxofzuvbvugsmeolvkwcszhiyxlzfgzgkcigttarutfmcxazyebvqtxbaaolirkjsysbpeqcnnbmewyiflnfrdxji
100 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
100 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaa...

output:

10000000000000000
999999999999999901
999999999999999832
999999999999999715
0

result:

ok 5 number(s): "10000000000000000 999999999999...9999999832 999999999999999715 0"

Test #4:

score: 5
Accepted
time: 0ms
memory: 18348kb

input:

5
100 1000000000000000000
shzjdvpdipbefflocbzemtahxhqsmsfkgeglhkdlaojllfcuzezkairuyubwvraoehlhzinzeglirkqsellamtfqsjqumokegxzx
100 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
100 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaa...

output:

10000000000000000
999999999999999901
999999999999999838
0
999999999999999847

result:

ok 5 number(s): "10000000000000000 999999999999...9999999838 0 999999999999999847"

Test #5:

score: 5
Accepted
time: 5ms
memory: 19036kb

input:

5
1000 1000000000000000000
yqfvrrdlnfhymfwvujysliaqsnpkkyoinhtkcasjsmmcxzopcuxihrrlphehsymvxsqbwokwpxdlmoewxncojujmzngxgcbijsesyxdbleiekfsgvhvooeqbxqltddskmuqvhopgjjrsaohmhjilifimfybzwchrqconquqqsfuqqqldityagdpgcfsvgbdpumfdalxujcyzhzqyfwriwjgwovydysqfuvbzqetndazvlkgbjzedafrccfizfpkpuqrhstwtadlkhcbhv...

output:

1000000000000000
999999999999999001
999999999999998482
999999999999998098
999999999999997859

result:

ok 5 number(s): "1000000000000000 9999999999999...999999998098 999999999999997859"

Test #6:

score: 5
Accepted
time: 4ms
memory: 19408kb

input:

5
1000 1000000000000000000
pixtqjtglhxfwbonlhwvddksgnuqjswinhunxhghfnuqirqfnnkioeydhkpbrqxkgkplqzheddxmutzvocqconzicazgfmbyztjnppcstvnqavyouodmgkvwhdxihckhyoxcamxqenjughhusufxyiiivadirmdsqbadxkfaekchfvsukwxbkdejyraihqdndthzuvqblixchamwzmhuenyfpetkgljsnrighareizgfvmtlgxeljluwoklcikmaefcsebndhiqbqpeuv...

output:

1000000000000000
999999999999999001
999999999999998488
0
999999999999997533

result:

ok 5 number(s): "1000000000000000 9999999999999...9999998488 0 999999999999997533"

Test #7:

score: 5
Accepted
time: 25ms
memory: 19928kb

input:

5
50000 100000
xudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyh...

output:

10001
24995
6004
34963
0

result:

ok 5 number(s): "10001 24995 6004 34963 0"

Test #8:

score: 5
Accepted
time: 39ms
memory: 20408kb

input:

5
50000 100000
xudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyh...

output:

10001
24994
6004
34969
1009

result:

ok 5 number(s): "10001 24994 6004 34969 1009"

Test #9:

score: 5
Accepted
time: 33ms
memory: 23452kb

input:

5
50000 100000
xudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyh...

output:

10001
24995
6004
34969
1009

result:

ok 5 number(s): "10001 24995 6004 34969 1009"

Test #10:

score: 5
Accepted
time: 26ms
memory: 23784kb

input:

5
50000 100000
xudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyhxudyh...

output:

10001
24997
6004
34963
1007

result:

ok 5 number(s): "10001 24997 6004 34963 1007"

Test #11:

score: 5
Accepted
time: 73ms
memory: 23336kb

input:

5
70000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999894988
499999999999924964
999999999999888298
999999999999533441
999999999999823805

result:

ok 5 number(s): "999999999999894988 49999999999...999999533441 999999999999823805"

Test #12:

score: 5
Accepted
time: 72ms
memory: 20296kb

input:

5
70000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999894988
499999999999934948
999999999999888292
999999999999533441
499999999999927943

result:

ok 5 number(s): "999999999999894988 49999999999...999999533441 499999999999927943"

Test #13:

score: 5
Accepted
time: 49ms
memory: 22824kb

input:

5
100000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999849979
499999999999894861
999999999999838298
499999998750274995
999999999999647812

result:

ok 5 number(s): "999999999999849979 49999999999...998750274995 999999999999647812"

Test #14:

score: 5
Accepted
time: 97ms
memory: 22312kb

input:

5
100000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999849988
499999999999894861
999999999999838292
999999999999369217
499999999999887884

result:

ok 5 number(s): "999999999999849988 49999999999...999999369217 499999999999887884"

Test #15:

score: 5
Accepted
time: 55ms
memory: 22704kb

input:

5
100000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999849976
166666666666641659
999999999999838304
499999998750274995
999999999999719421

result:

ok 5 number(s): "999999999999849976 16666666666...998750274995 999999999999719421"

Test #16:

score: 5
Accepted
time: 108ms
memory: 24436kb

input:

5
100000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999849982
499999999999894839
999999999999838292
999999999999370145
999999999999687718

result:

ok 5 number(s): "999999999999849982 49999999999...999999370145 999999999999687718"

Test #17:

score: 5
Accepted
time: 624ms
memory: 31656kb

input:

5
500000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999249988
249999999999783292
999999999999171633
999999999996226049
999999999998333136

result:

ok 5 number(s): "999999999999249988 24999999999...999996226049 999999999998333136"

Test #18:

score: 5
Accepted
time: 670ms
memory: 31300kb

input:

5
500000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999249979
249999999999783302
999999999999171627
999999999996226049
999999999998649255

result:

ok 5 number(s): "999999999999249979 24999999999...999996226049 999999999998649255"

Test #19:

score: 5
Accepted
time: 737ms
memory: 30792kb

input:

5
500000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999249985
499999999999466547
999999999999171633
999999999996226049
999999999998649207

result:

ok 5 number(s): "999999999999249985 49999999999...999996226049 999999999998649207"

Test #20:

score: 5
Accepted
time: 708ms
memory: 30176kb

input:

5
500000 1000000000000000000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

999999999999249976
249999999999783302
999999999999171645
999999999996226049
999999999998649333

result:

ok 5 number(s): "999999999999249976 24999999999...999996226049 999999999998649333"

Extra Test:

score: 0
Extra Test Passed