Acwing第53场周赛 T2:整除子串反思

简介: Acwing第53场周赛 T2:整除子串反思

给定一个由数字组成的字符串 s,请你计算能够被 4 整除的 s 的子串数量。


子串可以包含前导 0。


例如,如果 s 为 124,则满足条件的子串有 4 个:12,4,24,124;如果 s 为 04,则满足条件的子串有 33 个:0,4,04。


输入格式


一个由数字组成的字符串 s。


输出格式


一个整数,表示满足条件的子串数量。


数据范围


前 4 个测试点满足 1≤|s|≤10。

所有测试点满足 1≤|s|≤3×105

输入样例1:

124

输出样例1:

4

输入样例2:

04

输出样例2:

3

输入样例3:

5810438174

输出样例3:

9

做的时候没出来,后来去y总直播间,


学到了:原来就是一个小学奥数题hh;


如果x(x的长度大于等于2)能整除4,那么x末尾两位组成的数字能整除4(充要条件)


待会儿会证明(并且研究能被N整除的数的特征)


那么只需要遍历一遍字符串就可以了


如果末尾两个符合添加,res+=i(i种选择)


注意两种特判:遍历时i = 0情况,由于遍历时,是研究以x[i]结尾的所有子串的情况,而以x[i]结尾的子串分两类,一类长度为1,一类长度>=2,长度为1特判一下;

#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
    ll res = 0;
    string x;
    cin >> x;
    if (x[0]%4==0) res++;
    for (int i = 1;i<x.size();i++)
    {
       if (((x[i]-'0')+10*(x[i-1]-'0'))%4 == 0) 
            res += i;
        if (x[i]%4==0) res++;
    }
    cout<<res;
    return 0;
}

研究能被N整除的数的特征(研究自然数)

N            限定条件 下面附手写证明图


05655f918fdb466fa06de8bf8ccf081d.jpg

image.jpeg


奔赴热爱 奔赴山海!体会数学之美 算法之美

相关文章
|
5月前
【洛谷 P1002】[NOIP2002 普及组] 过河卒 题解(递归+记忆化搜索)
`NOIP2002`普及组的过河卒问题是一个棋盘路径计数挑战。卒从$(0,0)$出发到$(n,m)$,只能向下或向右移动,马在$(c1,c2)$固定,控制某些点。任务是计算不受马阻挡的路径数。输入是目标和马的位置,输出是路径总数。使用动态规划和记忆化搜索避免重复计算,样例输入$(6,6,3,3)$输出$6$。代码中定义了$f(x,y)$计算$(x,y)$处的路径数,利用边界条件和递推关系计算。
65 0
|
5月前
|
机器学习/深度学习
【Acwing积累】第一周(完全数、只出现一次的字符)
【Acwing积累】第一周(完全数、只出现一次的字符)
|
6月前
|
存储
每日一题啦(● ̄(エ) ̄●)(尼克切斯定理,等差数列)
每日一题啦(● ̄(エ) ̄●)(尼克切斯定理,等差数列)
30 0
|
6月前
|
算法
第十四届蓝桥杯集训——for——判断质数/素数
第十四届蓝桥杯集训——for——判断质数/素数
56 0
|
6月前
蓝桥备战--分糖果OJ2928 贪心 分类讨论
蓝桥备战--分糖果OJ2928 贪心 分类讨论
65 0
|
6月前
|
机器学习/深度学习
蓝桥杯-2/14天-完全平方数【另类思路】
蓝桥杯-2/14天-完全平方数【另类思路】
《蓝桥杯每日一题》递推·AcWing 3777. 砖块
《蓝桥杯每日一题》递推·AcWing 3777. 砖块
79 0
|
机器学习/深度学习
《蓝桥杯每日一题》背包dp·AcWing3382. 整数拆分
《蓝桥杯每日一题》背包dp·AcWing3382. 整数拆分
71 0
|
算法 测试技术 Python
第十二届蓝桥杯《杨辉三角》-二分法
第十二届蓝桥杯《杨辉三角》-二分法
95 0
|
测试技术 C语言
题目 2572: 蓝桥杯2020年第十一届省赛真题-子串分值
题目 2572: 蓝桥杯2020年第十一届省赛真题-子串分值