CF628B New Skateboard

题目描述

Max 想要买一块新的滑板。他已经计算出买一块新滑板所需的金额。他把计算器放在地板上,然后去向父母要钱。与此同时,他的小弟弟 Yusuf 走来,随意按下了计算器上的按键。不幸的是,Max 忘记了他之前计算出的数字。他唯一记得的是,这个数字可以被 $4$ 整除。 现在给你一个只包含数字的字符串 $s$(即 Yusuf 随机按键后计算器上显示的数字)。你的任务是找出字符串中有多少个子串可以被 $4$ 整除。子串可以以 $0$ 开头。 一个字符串的子串是由一段连续的字符组成的非空序列。 例如,如果字符串 $s$ 是 124,则有四个子串可以被 $4$ 整除:12,4,24 和 124。对于字符串 04,答案是三个:0,4,04。 由于输入输出数据量可能很大,建议使用快速输入输出方法:例如,在 C++ 中建议使用 gets/scanf/printf 而不是 getline/cin/cout,在 Java 中建议使用 BufferedReader/PrintWriter 而不是 Scanner/System.out。

输入格式

仅一行,包含字符串 $s$($1 \leq |s| \leq 3 \cdot 10^{5}$)。字符串 $s$ 只包含从 $0$ 到 $9$ 的数字。

输出格式

输出一个整数 $a$,表示字符串 $s$ 的所有可以被 $4$ 整除的子串数量。 注意答案可能非常大,因此你应使用 $64$ 位整数类型存储。在 C++ 中可以使用 long long 整数类型,在 Java 中可以使用 long 整数类型。

说明/提示

由 ChatGPT 5 翻译