2031. 折叠绳子
农夫约翰有一条长度为 L 的绳子,可用于农场周围的各种任务。
绳子在不同的位置有 N 个绳结,包括两个端点处各有一个。
约翰注意到,在某些位置,他可以将绳子对折,这样,相对的绳索上的绳结就可以彼此完全对齐:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zjxFBzbf-1653205353127)(2031.%20%E6%8A%98%E5%8F%A0%E7%BB%B3%E5%AD%90.assets/19_56f2d2b8b9-fig_knots.png)]](https://img-blog.csdnimg.cn/9774349cdbbc4681a59319af25b8c749.png)
请帮助约翰统计具有此属性的折叠点数。
允许在某个绳结处折叠,但不允许在端点绳结处折叠。
折叠后,较长的一侧可以有多余节点。
输入格式
第一行包含两个整数 N 和 L。
接下来 N 行,每行包含一个 0∼L 范围内的整数,表示一个绳结的位置。其中两行包含的数字分别是 0 和 L。
输出格式
输出有效折叠位置的数量。
数据范围
1≤L≤10000,
1≤N≤100
输入样例:
5 10
0
10
6
2
4
输出样例:
4
样例解释
有效折叠位置为1,2,3,8。
代码:
// 判断每个结点和 两个结点中间 是否可以当作对折点
#include
using namespace std;
const int N = 100;
int a[N];
int n, m;bool check(int l, int r)
{for (int i = l, j = r; i >= 0 && j <= n - 1; i--, j++){if (a[l] - a[i] != a[j] - a[r])return false;}return true;
}int main()
{cin >> n >> m;for (int i = 0; i < n; i++)cin >> a[i];sort(a, a + n);int res = 0;// 从当前结点向两边出发for (int i = 1; i < n - 1; i++){ if (check(i, i))res++;}// 中间点可能是分数 所以分别将左右两结点作为出发点来判断for (int i = 1; i < n; i++) {if (check(i - 1, i))res++;}cout << res << endl;return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
