QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#302465#2668. 论战捆竹竿2023zll100 ✓79ms19080kbC++143.1kb2024-01-10 21:42:402024-01-10 21:42:42

Judging History

This is the latest submission verdict.

  • [2024-01-10 21:42:42]
  • Judged
  • Verdict: 100
  • Time: 79ms
  • Memory: 19080kb
  • [2024-01-10 21:42:40]
  • Submitted

answer

#include<cstdio>
#include<cstring>
namespace IO{
	const int ARR_SIZE=1<<20;
	#define gc() ((IO::si!=IO::ti||(IO::ti=(IO::si=IO::input)+fread(IO::input,1,IO::ARR_SIZE,stdin))),IO::si!=IO::ti?*(IO::si++):EOF)
	#define pc(ch) ((IO::o.so!=IO::o.to||(fwrite(IO::o.output,1,IO::ARR_SIZE,stdout),IO::o.so=IO::o.output)),*(IO::o.so++)=ch)
	char input[ARR_SIZE],*si=input,*ti=input;
	struct Output_Stream{
		char output[ARR_SIZE],*so=output,*to=output+ARR_SIZE;
		~Output_Stream(){
			if(so==output)return;
			fwrite(output,1,so-output,stdout);
			so=output;
		}
	}o;
	template<typename T>
	void read(T&num){
		int ch=gc();
		num=0;
		while(ch<48||ch>57)ch=gc();
		while(ch>=48&&ch<=57)num=(num<<3)+(num<<1)+(ch^48),ch=gc();
	}
	void getstr(char*str){
		char ch=gc();
		while(ch=='\r'||ch=='\n'||ch==' '||ch=='\t')ch=gc();
		while(ch!='\r'&&ch!='\n'&&ch!=' '&&ch!='\t'&&ch!=EOF)*(str++)=ch,ch=gc();
		*str='\0';
	}
	template<typename T>
	void write(T a){
		static int ch[50],cnt=0;
		if(a==0)pc('0');
		while(a)ch[++cnt]=a%10|48,a/=10;
		while(cnt)pc(ch[cnt--]);
	}
}
using IO::read;
using IO::getstr;
using IO::write;
template<typename T>
inline T gcd(T a,T b){
	while(b){
		a%=b;
		a^=b^=a^=b;
	}
	return a;
}
template<typename T>
inline void chkmin(T&a,const T b){
	a>b&&(a=b);
}
inline int qmod(const int x,const int P){
	return x>=P?x-P:x;
}
typedef long long ll;
const int maxn=500000;
int n;
ll w;
char s[maxn+2];
int fail[maxn+1],stack[maxn+1],top;
ll f[maxn],g[maxn];
struct Data{
	int pos;
	ll val;
}q[maxn+1];
int l,r;
void getFail(){
	fail[1]=0;
	for(int i=2,j;i<=n;i++){
		j=fail[i-1];
		while(j&&s[j+1]!=s[i])j=fail[j];
		if(s[j+1]==s[i])j++;
		fail[i]=j;
	}
	top=0;
	for(int now=n;now;)stack[++top]=n-(now=fail[now]);
}
void trans(const int P,const int a0,const int d,const int lim){
	const int g=gcd(P,d);
	for(int T=0;T<g;T++){
		ll mn=f[T];
		int pos=T;
		for(int j=qmod(T+d,P);j!=T;j=qmod(j+d,P))
			if(mn>f[j])
				mn=f[j],pos=j;
		if(mn==w+1)continue;
		if(lim==1)
			for(int j=qmod(pos+d,P),k=pos;j!=pos;){
				chkmin(f[j],f[k]+d+a0);
				k=j,j=qmod(j+d,P);
			}
		else{
			l=1,r=0;
			q[++r]=Data{0,mn};
			for(int i=1,j=qmod(pos+d,P);j!=pos;i++){
				while(l<=r&&i-q[l].pos>lim)l++;
				chkmin(f[j],q[l].val+ll(i-q[l].pos)*d+a0);
				while(l<=r&&q[r].val-f[j]>ll(q[r].pos-i)*d)r--;
				q[++r]=Data{i,f[j]};
				j=qmod(j+d,P);
			}
		}
	}
}
void solve(){
	read(n),read(w);
	getstr(s+1);
	getFail();
	int res=1;
	for(int k=0;k<stack[res];k++)f[k]=w+1;
	f[n%stack[res]]=n;
	for(int i=1,j,diff;i<top;i=j+1){
		j=i+1,diff=stack[j]-stack[j-1];
		while(j<top&&stack[j+1]-stack[j]==diff)j++;
		trans(stack[i],stack[i],diff%stack[i],j-i),res=i;
		if(j<top){
			for(int k=0;k<stack[j+1];k++)g[k]=w+1;
			for(int k=0;k<stack[i];k++)chkmin(g[f[k]%stack[j+1]],f[k]);
			memcpy(f,g,sizeof(ll)*stack[j+1]);
			trans(stack[j+1],0,stack[i],1),res=j+1;
		}
	}
	ll ans=0;
	for(int i=0;i<stack[res];i++)
		if(f[i]<=w)
			ans+=(w-f[i])/stack[res]+1;
	write(ans),pc('\n');
}
int main(){
	int T;
	read(T);
	while(T--)solve();
	return 0;
}

详细

Test #1:

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

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: 2836kb

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: 0ms
memory: 2956kb

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: 2764kb

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: 0ms
memory: 2940kb

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: 1ms
memory: 2940kb

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: 0ms
memory: 4592kb

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: 4ms
memory: 4560kb

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: 0ms
memory: 4604kb

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: 2ms
memory: 4564kb

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: 8ms
memory: 5344kb

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: 5ms
memory: 5192kb

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: 8ms
memory: 6252kb

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: 9ms
memory: 6360kb

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: 4ms
memory: 6328kb

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: 9ms
memory: 6444kb

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: 68ms
memory: 19080kb

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: 70ms
memory: 18956kb

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: 65ms
memory: 19028kb

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: 79ms
memory: 19020kb

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