B4185题解
guoshengyu1231 · · 题解
思路:
这道题如果暴力枚举子串,那么时间复杂度
正解应该是用数学的方法,首先,我们要知道,一个数如果是
证明:一个正整数一定可以写成
到这思路已经非常清晰了,枚举
代码:
#include<bits/stdc++.h>
using namespace std;
string a;
long long sum=0;//记的开long long
int main()
{
cin>>a;
int n=a.size();
for(int i=0;i<n;i++)
{
//注意:由于i是从0开始的,所以计数时要加1
if((a[i]-'0')%5==0) sum+=i+1;//判断5的倍数
else if(i>0&&((a[i-1]-'0')*10+a[i]-'0')%4==0)//判断末两位是4的倍数
{
if((a[i]-'0')%4==0) sum++;//判断第i个数是4的倍数
sum+=i;
}
else if((a[i]-'0')%4==0) sum++;//判断第i个数是4的倍数
}
cout<<sum;
return 0;
}