Submission #40389298


Source Code Expand

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const int MAXN=4e5+10,mod=1e9+7,LIM=4e5;
void add(ll& x,ll y){x=(x+y)%mod;}
void sub(ll& x,ll y){x=(x-y+mod)%mod;}
void tomin(ll& x,ll y){x=min(x,y);}
//
int n,m,cur;
char s[MAXN],t[MAXN];
int cnt[MAXN],tot;

namespace T1{
	ll f[MAXN];
	void solve(){
		f[0]=f[1]=1;
		rep(i,2,n)f[i]=f[i-1],add(f[i],f[i-2]);

		ll ans=f[n-2];add(ans,f[n]);
		cout<<ans<<endl;
	}
};

ll f[MAXN],g[MAXN],sum[MAXN];

int main(){

	cin>>n>>m>>(s+1);
	int flag=1;
	rep(i,2,m)flag &= (s[i]==s[1]);
	

	if(flag){
		T1::solve();
		exit(0);
	}
	for(int i=1;i<=m;){
		if(s[i] == s[1])t[++cur] = s[i],i++;
		else{
			int j=i;while(s[j] == s[i])j++;
			t[++cur]=s[i];
			i=j;
		}
	}

	int pre=0;
	rep(i,1,cur)if(t[i] != t[1]){
		cnt[++tot]=i-pre-1;
		pre=i;
	}
	if(pre!=cur)cnt[++tot]=cur-pre;
	//	
	ll mx=min(n-1,cnt[1]+1);

	rep(i,2,tot-1)if(odd(cnt[i]))tomin(mx,cnt[i]);
	if(s[m] != s[1]){
		if(odd(cnt[tot]))tomin(mx,cnt[tot]);
	}
	mx++; // 每一段只能取 2~mx 之间的偶数

	if(odd(mx))mx--;
	if(mx<2){
		cout<<"0\n";
		return 0;
	}
	mx/=2; // 每一段取 [1,mx] 之间的数

	g[0]=sum[0]=1;
	rep(i,1,n){
		g[i] = sum[i-1];
		if(i > mx)sub(g[i],sum[i-mx-1]);

		sum[i]=sum[i-1];
		add(sum[i],g[i]);
	}
	rep(i,0,n)if(even(i))f[i]=g[i/2];

	//
	ll ans=0;

	rep(len,1,n-1)if(odd(len) && len<=mx*2-1){
		ll ways=len+1; //有len+1种放置方式

		add(ans,ways*f[n-len-1]%mod);
	}
	cout<<ans<<endl;

    return 0;
}

Submission Info

Submission Time
Task E - Go around a Circle
User Crying
Language C++ (GCC 9.2.1)
Score 1500
Code Size 1881 Byte
Status AC
Exec Time 28 ms
Memory 8700 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1500 / 1500
Status
AC × 3
AC × 66
Set Name Test Cases
Sample sample01.txt, sample02.txt, sample03.txt
All sample01.txt, sample02.txt, sample03.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in46.txt, in47.txt, in48.txt, in49.txt, in50.txt, in51.txt, in52.txt, in53.txt, in54.txt, in55.txt, in56.txt, in57.txt, in58.txt, in59.txt, in60.txt, sample01.txt, sample02.txt, sample03.txt
Case Name Status Exec Time Memory
in01.txt AC 16 ms 8660 KB
in02.txt AC 15 ms 8516 KB
in03.txt AC 17 ms 8400 KB
in04.txt AC 2 ms 3416 KB
in05.txt AC 2 ms 3508 KB
in06.txt AC 2 ms 3388 KB
in07.txt AC 2 ms 3604 KB
in08.txt AC 11 ms 8084 KB
in09.txt AC 4 ms 4900 KB
in10.txt AC 9 ms 8140 KB
in11.txt AC 9 ms 7964 KB
in12.txt AC 11 ms 5320 KB
in13.txt AC 12 ms 5320 KB
in14.txt AC 6 ms 5072 KB
in15.txt AC 10 ms 5308 KB
in16.txt AC 2 ms 3376 KB
in17.txt AC 18 ms 8616 KB
in18.txt AC 12 ms 5284 KB
in19.txt AC 14 ms 8620 KB
in20.txt AC 13 ms 8512 KB
in21.txt AC 14 ms 8700 KB
in22.txt AC 14 ms 8540 KB
in23.txt AC 14 ms 8492 KB
in24.txt AC 16 ms 8628 KB
in25.txt AC 13 ms 8548 KB
in26.txt AC 13 ms 8248 KB
in27.txt AC 13 ms 8380 KB
in28.txt AC 15 ms 8456 KB
in29.txt AC 13 ms 8508 KB
in30.txt AC 13 ms 8512 KB
in31.txt AC 14 ms 8484 KB
in32.txt AC 14 ms 8608 KB
in33.txt AC 13 ms 8256 KB
in34.txt AC 16 ms 8492 KB
in35.txt AC 13 ms 8680 KB
in36.txt AC 13 ms 8408 KB
in37.txt AC 12 ms 8528 KB
in38.txt AC 14 ms 8356 KB
in39.txt AC 15 ms 8400 KB
in40.txt AC 14 ms 8360 KB
in41.txt AC 13 ms 8580 KB
in42.txt AC 13 ms 8420 KB
in43.txt AC 15 ms 8456 KB
in44.txt AC 28 ms 8328 KB
in45.txt AC 13 ms 8552 KB
in46.txt AC 15 ms 8288 KB
in47.txt AC 14 ms 8600 KB
in48.txt AC 15 ms 8552 KB
in49.txt AC 8 ms 4456 KB
in50.txt AC 9 ms 4284 KB
in51.txt AC 12 ms 4380 KB
in52.txt AC 9 ms 4384 KB
in53.txt AC 9 ms 4276 KB
in54.txt AC 9 ms 4416 KB
in55.txt AC 14 ms 6264 KB
in56.txt AC 13 ms 6096 KB
in57.txt AC 11 ms 6164 KB
in58.txt AC 12 ms 8164 KB
in59.txt AC 14 ms 8264 KB
in60.txt AC 12 ms 8248 KB
sample01.txt AC 2 ms 3532 KB
sample02.txt AC 2 ms 3420 KB
sample03.txt AC 2 ms 3432 KB