农夫约翰有一条长度为 的绳子,可用于农场周围的各种任务。
绳子在不同的位置有 个绳结,包括两个端点处各有一个。
约翰注意到,在某些位置,他可以将绳子对折,这样,相对的绳索上的绳结就可以彼此完全对齐:
请帮助约翰统计具有此属性的折叠点数。
允许在某个绳结处折叠,但不允许在端点绳结处折叠。
折叠后,较长的一侧可以有多余节点。
输入格式
第一行包含两个整数 和
。
接下来 行,每行包含一个
范围内的整数,表示一个绳结的位置。其中两行包含的数字分别是
和
。
输出格式
输出有效折叠位置的数量。
数据范围
输入样例:
5 10
0
10
6
2
4
输出样例:
4
样例解释
有效折叠位置为 。
using namespace std;
const int N = 110;
int n, l;
int a[N];
int main(){
cin >> n >> l;
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++){
bool flag = true;
for(int j = i - 1, k = i + 1; j >= 0 && k < n; j--, k++)
if(a[i] - a[j] != a[k] - a[i]){
flag = false;
break;
}
if(flag) res++;
}
for(int i = 1; i < n; i++){
bool flag = true;
int l = i - 1, r = i;
for(int j = l, k = r; j >= 0 && k < n; j--, k++)
if(a[l] - a[j] != a[k] - a[r]){
flag = false;
break;
}
if(flag) res++;
}
cout << res << endl;
return 0;
}