题目背景对应的选择、判断题试题 - GESP 六级样题C 组 - 洛谷有题题目描述给定一串长度为 L、由数字 0∼9 组成的数字串 S。容易知道它的连续子串共有 2L(L1) 个。如果某个子串对应的数允许有前导零是 p 的倍数则称该子串为数字串 S 对于 p 的亲朋数。例如数字串 S 为“ 12342 ”、p 为 2则在 15 个连续子串中亲朋数有“ 12 ”、“ 1234 ”、“ 12342 ”、“ 2 ”、“ 234 ”、“ 2342 ”、“ 34 ”、“ 342 ”、“ 4 ”、“ 42 ”、“ 2 ”共 11 个。注意其中“ 2 ”出现了 2 次但由于其在 S 中的位置不同记为不同的亲朋数。现在告诉你数字串 S 和正整数 p 你能计算出有多少个亲朋数吗输入格式输入的第一行包含一个正整数 p。约定 2≤p≤128。输入的第二行包含一个长为 L 的数字串 S。约定 1≤L≤106。输出格式输出一行一个整数表示答案。输入输出样例输入 #1复制2 102输出 #1复制5输入 #2复制2 12342输出 #2复制11说明/提示样例 1 解释5 个亲朋数分别 10、102、0、02、2。代码实现#include iostream #include string #include cstring using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int p; string s; cin p s; ll ans 0; ll dp[130] {0}; for (char ch : s) { int d ch - 0; ll tmp[130] {0}; for (int r 0; r p; r) { if (dp[r]) { int nr (1LL * r * 10 d) % p; tmp[nr] dp[r]; } } int self d % p; tmp[self] 1; ans tmp[0]; memcpy(dp, tmp, sizeof(dp)); } cout ans endl; return 0; }