个人表示第一次看到这个题目以为是一个DP的问题,后来想想但是又不像,表示确实做的时候是没有思路,参考了 网上大神们的思路,惭愧,就要去比赛了,还这么水,是坑队友的节奏么。
这个题目的做法是这样的,其实不同的情况只是在奇数的情况下,为啥这么说呢,454545,只能是999,但是45455
就有三种,所以只有奇数才会有不同的,而规律就是个数/2+1,所以情况是每个奇数个数相乘就是了,用一个新的 数组来记住连续式的个数,只要是奇数,就让它满足/2+1如果发生了断电,就不加了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=100010;
int num[N];
int main(){
char s[N];
scanf("%s",s);
memset(num,0,sizeof(num));
__int64 sum=1;
//cout<<"a "<<ch.size()<<endl;
//cout<<"b "<<ch[ch.size()]<<endl;
//cout<<"c "<<ch[ch.size()]-'0'<<endl;
int l=strlen(s);
for(int i=1;i<=l;i++)
if(s[i]-'0'+s[i-1]-'0'==9)
{
num[i]=num[i-1]+1;
}
else
if(num[i-1]>0&&num[i-1]%2==0) sum*=(num[i-1]/2+1);
cout<<sum<<endl;
}