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 |
|
|
| 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 |