题意:
给一个数字字符串,问有多少个子串是4的倍数
思路:
以前写过一题:CodeForces 550C
这题的方法:
因为1000是8的倍数,则只需要看最后三位是否8的倍数,暴力判长度一二三位即可
现在这题:
因为100是4的倍数,则只需要后两位是4的倍数即可,暴力判长度一二位即可
然后这两位的左边接任意数都是4的倍数
ps:
其他类似题应该也是这个套路
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=3e5+5;
char s[maxm];
signed main(){
scanf("%s",s+1);
int n=strlen(s+1);
for(int i=1;i<=n;i++){
s[i]-='0';
}
int ans=0;
for(int i=1;i<=n;i++){
if(s[i]%4==0)ans++;//单个数
int temp=s[i-1]*10+s[i];
if(temp%4==0){
ans++;//这两位本身
ans+=i-2;//这两位左边随便加
}
}
cout<<ans<<endl;
return 0;
}