2019牛客多校第四场 number (300的倍数)
题目:https://ac.nowcoder.com/acm/contest/884/K
题意:
给你一串数字,求他有多少个子序列是300的倍数。
题解:
各个数的和为3的倍数,则他就是3的倍数。后面有两个0的数就是100的倍数。
AC代码
#include<stdio.h>
#include<string.h>
char s[100005];
int sum[100005];
int t[3];
int main()
{
scanf("%s", s+1);
int len = strlen(s+1);
long long ans = 0;
for(int i = 1; i <= len; i++)
{
sum[i] = (sum[i-1] + s[i] - '0') % 3;
}
for(int i = 1; i <= len; i++)
{
if(s[i] == '0')
{
ans++;
if(s[i-1] == '0')
{
ans += t[sum[i]];
}
}
t[sum[i-1]]++;
printf("%d",t[sum[i-1]]);
}
printf("%lld\n", ans);
return 0;
}