QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#106315#2668. 论战捆竹竿xiaoyaowudi100 ✓769ms21444kbC++172.1kb2023-05-17 13:27:332023-05-17 13:27:35

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-05-17 13:27:35]
  • Judged
  • Verdict: 100
  • Time: 769ms
  • Memory: 21444kb
  • [2023-05-17 13:27:33]
  • Submitted

answer

#include <algorithm>
#include <iostream>
#include <tuple>
using ll=long long;
constexpr ll inf(1.01e18);
constexpr int N(5e5+10);
void trans(ll mn[],int &q,int p,int d,int c)
{
	static ll b[N];std::fill(b,b+p,inf);
	for(int i(0),j;i<q;++i) j=mn[i]%p,b[j]=std::min(b[j],mn[i]);
	{
		int t(std::__gcd(p,q)),r(q%p);
		for(int i(0);i<t;++i)
		{
			ll mt(inf);int pt(0),s(i);
			do
			{
				if(b[s]<mt)	mt=b[s],pt=s;
				s+=r;if(s>=p) s-=p;
			}while(s!=i);
			mt=inf;s=pt;
			do
			{
				mt=std::min(mt+q,b[s]);
				b[s]=mt;s+=r;if(s>=p) s-=p;
			}while(s!=pt);
		}
	}
	{
		int t(std::__gcd(p,d)),r(d%p);
		for(int i(0);i<t;++i)
		{
			ll mt(inf);int pt(0),s(i);
			do
			{
				if(b[s]<mt) mt=b[s],pt=s;
				s+=r;if(s>=p) s-=p;
			}while(s!=i);
			struct _q
			{
				ll val;int pos;
			};static _q qq[N];int ql(0),qr(0);
			s=pt;int k(0);
			do
			{
				++k;if(ql<qr) b[s]=std::min(b[s],qq[ql].val+1ll*k*d+p);
				ll val(b[s]-1ll*k*d);
				while(ql<qr && qq[qr-1].val>=val) --qr;qq[qr++]=(_q){val,k};
				while(ql<qr && qq[ql].pos<=k-c) ++ql;
				s+=r;if(s>=p) s-=p;
			}while(s!=pt);
		}
	}
	std::copy(b,b+p,mn);q=p;
}
int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	int T;std::cin>>T;
	while(T--)
	{
		static std::tuple<int,int,int> ds[20];int cnt(0);static int fl[N];
		int n;ll x;static char s[N];std::cin>>n>>x>>(s+1);
		for(int i(2);i<=n;++i)
		{
			int j(fl[i-1]);while(j && s[j+1]!=s[i]) j=fl[j];
			if(s[j+1]==s[i]) ++j;fl[i]=j;
		}
		for(int i(fl[n]);i;)
		{
			int j(i),k(1);
			for(;fl[j]>i/2;j=fl[j],++k);
			if(k==1) ds[++cnt]={n-i,1,0};
			else ds[++cnt]={n-i,(i-j)/(k-1),k-1};
			i=fl[j];
		}
		static ll mn[N];int cur(n);std::fill(mn,mn+n,inf);mn[0]=n;
		for(int i(1);i<=cnt;++i)
		{
			auto [m,d,c]=ds[i];
			// std::cerr<<m<<" "<<d<<" "<<c<<std::endl;
			trans(mn,cur,m,d,c);
			// for(int i(0);i<cur;++i) std::cerr<<mn[i]<<" ";std::cerr<<std::endl;
		}
		long long ans(0);
		for(int i(0);i<cur;++i) if(mn[i]<=x) ans+=(x-mn[i])/cur+1;
		std::cout<<ans<<"\n";
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 5
Accepted
time: 1ms
memory: 3496kb

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

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

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

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

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

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: 51ms
memory: 5112kb

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

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

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: 73ms
memory: 5160kb

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: 75ms
memory: 5992kb

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: 91ms
memory: 5936kb

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: 95ms
memory: 7020kb

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: 123ms
memory: 7116kb

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: 103ms
memory: 7076kb

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: 115ms
memory: 7108kb

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: 760ms
memory: 21392kb

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: 758ms
memory: 21444kb

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: 752ms
memory: 21360kb

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: 769ms
memory: 21400kb

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