宜昌市网站建设_网站建设公司_网站备案_seo优化
2026/1/18 10:53:19 网站建设 项目流程

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:AtCoder Beginner Contest竞赛题解 | 汇总


A - Triangular Number

【题目来源】

洛谷:[AT_abc435_a ABC435A] Triangular Number - 洛谷

【题目描述】

给定一个正整数 \(N\)
请输出从 \(1\)\(N\) 的所有整数之和,即 \(1+2+\cdots+N\)

【输入】

从标准输入中读取一行,格式如下:

\(N\)

【输出】

输出从 \(1\)\(N\) 的所有整数之和。

【输入样例】

5

【输出样例】

15

【代码详解】

#include <bits/stdc++.h>
using namespace std;int n;  // 输入的正整数nint main()
{// 输入正整数ncin >> n;// 计算1到n的和,并输出结果// 公式:S = n(n+1)/2cout << (n + 1) * n / 2 << endl;return 0;
}

【运行结果】

5
15

B - No-Divisible Range

【题目来源】

洛谷:[AT_abc435_b ABC435B] No-Divisible Range - 洛谷

【题目描述】

给定一个长度为 \(N\) 的正整数序列 \(A=(A_1,A_2,\ldots,A_N)\)

请你求出有多少对整数 \((l,r)\) 满足 \(1\leq l\leq r\leq N\),并且满足以下条件:

对于每一个满足 \(l\leq i\leq r\) 的整数 \(i\)\(A_i\) 不是 \(A_l+A_{l+1}+\cdots+A_r\) 的约数。

【输入】

输入从标准输入中读入,格式如下:

\(N\) \(A_1\) \(A_2\) $ \ldots $ \(A_N\)

【输出】

输出满足条件的对数。

【输入样例】

5
8 6 10 5 7

【输出样例】

6

【算法标签】

《洛谷 AT_abc435_b No-Divisible Range》 #枚举#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 55;  // 最大数组长度
int n;             // 数组长度
int ans;           // 答案:符合条件的区间数量
int a[N];          // 原始数组
int sa[N];         // 前缀和数组,sa[i]=a[1]+a[2]+...+a[i]/*** 检查区间[l,r]的和是否能被区间内任意一个数整除* @param res 区间和* @param l 区间左端点* @param r 区间右端点* @return 如果区间和不能被区间内任意数整除,返回true;否则返回false*/
bool check(int res, int l, int r)
{// 遍历区间[l,r]内的每个数for (int i = l; i <= r; i++){// 如果区间和能被a[i]整除,则不符合条件if (res % a[i] == 0){return false;}}// 区间和不能被区间内任意数整除return true;
}int main()
{// 输入数组长度cin >> n;// 输入数组并计算前缀和for (int i = 1; i <= n; i++){cin >> a[i];sa[i] = sa[i - 1] + a[i];  // 前缀和}// 枚举所有区间[i,j]for (int i = 1; i <= n; i++){for (int j = i; j <= n; j++){// 计算区间[i,j]的和int tot = sa[j] - sa[i - 1];// 调试输出// cout << "tot " << tot << endl;// 检查区间和是否能被区间内任意数整除if (!check(tot, i, j)){continue;  // 不符合条件,跳过}// 调试输出// cout << "i j " << i << " " << j << endl;// 符合条件,计数加1ans++;}}// 输出结果cout << ans << endl;return 0;
}

【运行结果】

5
8 6 10 5 7
6

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询