2019牛客暑期多校训练营(第四场)K number(思维)
程序员文章站
2022-04-02 22:09:50
...
题意:求可以被300整数的子串数量。
思路:有个On的做法,令mo[i]为前i位和模3的值,那么对于一个区间[l,r],且s[r+1]==s[r+2]==0,合法条件是s[r]=s[i](l<i<r)。
模相等间隔必定是3的倍数。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll cnt[5], ans;
char s[100010];
int main() {
scanf("%s", s);
cnt[0] = 1;
int mo = 0;
for(int i = 0; s[i] != '\0'; i++) {
if(s[i] == '0')
ans++;
if(s[i] == '0' && s[i + 1] == '0') {
ans += cnt[mo];
}
mo = (mo + s[i] - '0') % 3;
cnt[mo]++;
}
printf("%lld\n", ans);
return 0;
}
推荐阅读
-
2020牛客暑期多校第四场 H - Harder Gcd Problem(思维/构造)
-
2020牛客暑期多校 第四场H-Harder Gcd Problem(思维,gcd)
-
2019牛客暑期多校训练营(第四场)K number(思维)
-
2019牛客暑期多校训练营(第四场)K number(思维)
-
2019牛客暑期多校训练营 第四场 K – number (思维+前缀和)
-
牛客网暑期ACM多校训练营(第四场)G Maximum Mode(思维)
-
2019牛客暑期多校训练营(第四场)D triples I(构造+思维)
-
牛客网暑期ACM多校训练营(第四场)G.Maximum Mode (思维)
-
2019牛客暑期多校训练营(第四场)C:sequence(思维+连续最大和)
-
2019牛客暑期多校训练营(第四场)D——triples I(思维)