我们得到一个由数字0-9
组成的字符串。我们必须计算可被数字k
整除的子字符串数。一种方法是生成所有子字符串并检查它是否可被k
整除,但这将花费O(n^2)
时间。我想在O(n*k)
时间内解决这个问题。
1 <= n <= 100000 and 2 <= k <= 1000.
我看到了类似的问题here。但在这个问题上,k被固定为4。所以,我使用了4的可分性属性来解决问题。 以下是我对该问题的解决方案:
int main()
{
string s;
vector<int> v[5];
int i;
int x;
long long int cnt = 0;
cin>>s;
x = 0;
for(i = 0; i < s.size(); i++) {
if((s[i]-'0') % 4 == 0) {
cnt++;
}
}
for(i = 1; i < s.size(); i++) {
int f = s[i-1]-'0';
int s1 = s[i] - '0';
if((10*f+s1)%4 == 0) {
cnt = cnt + (long long)(i);
}
}
cout<<cnt;
}
但我想要任何k值的通用算法。