U362820 GSEP 6级样题 亲朋数
GSEP 6级样题 亲朋数
题目描述
给定一串长度为L、由数字 0-9 组成的数字串S。容易知道,它的连续子串共有L(L+1)/2 个。如果某个子串对应的数(允许有前导零)是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。
输出格式
输出一行,包含一个正整数C,表示亲朋数的个数。
样例 #1
样例输入 #1
2
102
样例输出 #1
5
样例 #2
样例输入 #2
2
12342
样例输出 #2
11
提示
样例解释1:
5 个亲朋数,分别为“10”、“102”、“0”、“02”、“2”。
#include <iostream>
#include <vector>
using namespace std;
// 超长整型取模
uint64_t M(string s, uint64_t n) {
uint64_t r = 0;
for (char c: s) {
r *= 10;
r += (c - '0');
r %= n;
}
return r;
}
int main() {
int n; cin >> n;
string s; cin >> s;
uint64_t ct = 0;
for (size_t i = 0; i < s.length(); i++) {
for (size_t j = 1; j <= s.length() - i; j++){
if (M(s.substr(i, j), n) == 0) ++ct;
}
}
cout << ct;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】